|
楼主 |
发表于 2017-6-24 19:59:18
|
显示全部楼层
本帖最后由 NC@jiang@nan 于 2017-6-24 21:39 编辑
9 V5 A! c; y+ A8 g2 `0 n
4 s. _ f, W) Q1 p2 Y/ T丹大,我实在是不好意思了。看了两天您提供的这个宏文件,发现里面有几段代码在循环调用,按逻辑关系去推理,推理得头晕了,看不懂了。想改成在EXCEL里调用SW程序来打印文件,现在在试着做这个宏代码。刚开始做就碰到个问题,不知道在EXCEL的宏中是否可以检测SW软件是否已经启动,如果SW没启动的话就中止宏程序的运行。这样做的原因是:如果没有预先启动SW,这样在宏程序运行中用 Set swApp = CreateObject("SldWorks.Application") 代码来启动SW,在批量处理几个文件时,SW每处理完一个文件后就退出了,等处理下一个文件时又被Set swApp = CreateObject("SldWorks.Application")这个代码调出相当于又需要重新启动一次SW,这样循环启动比调用运行宏之前已经手动启动好的SW的速度要慢很多卡很多,特别电脑配置低点的时候处理文件的速度差距是天壤之别。我百度了一下”EXCEL VBA 怎么检测 调用的程序是否处于打开状态“主题,没找到有效的解决办法,能否请丹大指点迷津?谢谢! f6 s4 J7 n4 S2 K5 C. V. d
补充:8 x3 ?% a5 h- A" X% v# f2 u
丹大,又仔细的百度搜索了一会,修改代码后已经解决了问题了。
! |7 G0 {. O% Q6 b. C1 S满足我要求的功能的代码如下:# {+ h& e8 J' u" E4 X8 X
# S- u( k# j2 A4 H, t! c2 } On Error Resume Next- Y+ L" |, y3 z: j; C& ?4 y
Set swApp = GetObject(, "SldWorks.Application") 2 q! s- {" E- {* Q
While swApp Is Nothing '如果调用SW程序失败(SW程序未启动)时,循环
3 t: Y8 H2 a0 H: I& C! ?5 t1 a IResponse = MsgBox("请启动SolidWorks后重试或点击取消放弃打印!!", vbRetryCancel + vbInformation, "SolidWorks程序未启动!")! w0 e1 C% G) Y, B4 G9 B7 F" `" o
If IResponse = vbCancel Then Exit Sub6 e( f1 J! s8 B. P' b2 w# ?
Set swApp = GetObject(, "SldWorks.Application")
; P. n% J" _3 x, G0 y* W/ ` Wend
6 m4 h* o# Y3 V3 E2 z$ @- k On Error GoTo 0, @9 I; }1 U3 Y* }1 I
& T, }) }" A0 s8 Q5 A7 u |
|