|
|

楼主 |
发表于 2017-6-24 19:59:18
|
显示全部楼层
来自: 中国广东深圳
本帖最后由 NC@jiang@nan 于 2017-6-24 21:39 编辑
% D0 T/ b2 j4 {+ E3 Y7 J" N9 Z
* Z, O' p2 k, `+ N% j! L+ J6 Y丹大,我实在是不好意思了。看了两天您提供的这个宏文件,发现里面有几段代码在循环调用,按逻辑关系去推理,推理得头晕了,看不懂了。想改成在EXCEL里调用SW程序来打印文件,现在在试着做这个宏代码。刚开始做就碰到个问题,不知道在EXCEL的宏中是否可以检测SW软件是否已经启动,如果SW没启动的话就中止宏程序的运行。这样做的原因是:如果没有预先启动SW,这样在宏程序运行中用 Set swApp = CreateObject("SldWorks.Application") 代码来启动SW,在批量处理几个文件时,SW每处理完一个文件后就退出了,等处理下一个文件时又被Set swApp = CreateObject("SldWorks.Application")这个代码调出相当于又需要重新启动一次SW,这样循环启动比调用运行宏之前已经手动启动好的SW的速度要慢很多卡很多,特别电脑配置低点的时候处理文件的速度差距是天壤之别。我百度了一下”EXCEL VBA 怎么检测 调用的程序是否处于打开状态“主题,没找到有效的解决办法,能否请丹大指点迷津?谢谢
! G6 V) B* U& N7 {* @- y! A. w8 D补充:
V* v) k5 g3 D6 O, _! i丹大,又仔细的百度搜索了一会,修改代码后已经解决了问题了。$ W* R) @5 w; [6 a3 N
满足我要求的功能的代码如下:
" A0 ?3 [$ o/ f- a2 {; R
; n: e9 O' }3 W* @$ V2 @ On Error Resume Next
4 K Z0 |, l& G2 w Set swApp = GetObject(, "SldWorks.Application") 6 S i5 L- z- @+ g4 K/ V
While swApp Is Nothing '如果调用SW程序失败(SW程序未启动)时,循环9 T: X6 e7 g0 i p' e
IResponse = MsgBox("请启动SolidWorks后重试或点击取消放弃打印!!", vbRetryCancel + vbInformation, "SolidWorks程序未启动!")9 T2 c, F! c6 U" F3 Z* Q3 ]8 v
If IResponse = vbCancel Then Exit Sub
3 z; {8 [0 M! i6 F( s Set swApp = GetObject(, "SldWorks.Application")
$ f8 d' j/ w# a5 V5 n% c# P, P Wend# b" U9 |' u7 Z8 T% X3 T
On Error GoTo 07 ]3 D5 r5 M, m3 x3 `
" [ ~- Z6 D$ M0 E8 h8 y7 i, A
|
|