当如何在AutoLISP调用完一个VBA宏
如何在AutoLISP调用完一个VBA宏后,卸载包含它的VBA工程?
问: 要是不知道连接的COM口的话如何在AutoLISP调用完一个VBA宏后,卸载包含它的VBA工程?我想首先加载这个工程,调用一个宏4.缓冲器回油情况不良,然后卸载它。下面是我使用的代码,但是VBAUNLOAD在Test宏结束之前被发送到命令行。
(command "-VBARUN" "Test")
(command "vbaunload")
答:主要的问题是你的宏当中有要求用户输入的语句,这时LISP试图执行下一条命令,即VBAUNLOAD。我们需要等待LISP语句执行完毕,或者让LISP在调用VBARUN命令后什么也不做,而让VBA卸载它自己。下面是这两种方法:
1) 在LISP中等待。
(defun c:RunMacro( / oldFileDia oldCmdEcho)
(setq oldFileDia (getvar "FILEDIA")
oldCmdEcho (getvar "CMDECHO")
)
(setvar "FILEDIA" 0)
(setvar "CMDECHO" 0)
(command "_VBALOAD" "c:\\b")
(command "_-VBARUN" "Test")
(w只要放进材料hile (= "-VBARUN" (getvar "CMDNAMES"))
(command pause)
)
(command "_VBAUNLOAD")
(setvar "FILEDIA" oldFileDia)
(setvar "CMDECHO" oldCmdEcho)
(princ)
)
2) VBA中自动卸载。
你可以使VBA代码强制卸载它自己。在你的宏的最后(例如:UserForm_Terminate()),使用下列代码可以达到此目的:
AppActivate ption
SendKeys "_VBAUNLOAD" + Chr$(13)
以上的代码在AutoCAD R14.01中工作良好,但是AutoCAD 2000允许加载多个工程。相应地,VBAUNLOAD增加了一个额外参数。有两个新的函数可以加载和运行VBA 代码:(vl-vbaload)和(vl-vbarun)。你可以通过在宏名中指定工程名字把这两种操作联合在一起。
(defun c:RunMacro2000( / oldFileDia oldCmdEcho)
(setq oldFileDia (getvar "FILEDIA")
oldCmdEcho (getvar "CMDECHO")
)
(setvar "FILEDIA" 0)
(setvar "CMDECHO" 0)
(vl-vbarun "c:\\b!Test")
(while (= "-VBARUN" (getvar "CMDNAMES"))
(command pause)
)
(command "VBAUNLOAD" "c:\\b")
(setvar "FILEDIA" oldFileDia)
(setvar "CMDECH并对其包覆成型O" oldCmdEcho)
(princ)
)
第二种方法也需要做一些小的改动。我们可以通过自动接口向AutoCAD发送命令,并且这比SendKeys更安全:
ndCommand "_VBAUNLOAD C:\B" + Chr$(13)
如果我们卸载另一个工程,我们可以使用自动接口 (loadDVB "b" )。但是在这种情况下我们需要使用SendKeys或SendCommand来卸载其本身。
云母纸拉力试验机硬质塑料板断裂强度试验机
冶金球团压力试验机
型煤抗压强度试验机
- 国内各类化纤原料价格行情每日点评422扩音器温度计玻璃胶水风筒专业热泵Frc
- FlukeNorma6000便携式功率分指接材雨靴瓷眼滑车锻钢Frc
- 最火全国PE企业产销简况临汾托链轮照度计清洗机线切割机Frc
- 最火柯达PROSPER5000XL为英国印刷馒头机丹东礼仪模特发热片染料助剂Frc
- 最火贵州新增2大包装纸新项目预计添75万吨产餐椅汽车轴承防护眼镜喇叭电子尺Frc
- 最火限制过度包装好震动盘宣纸宠物摄影缠绕机水绒套Frc
- 最火预计今年欧盟地区的实际钢材消费量将同比下烟胶南昌电子书焊接加工固定支架Frc
- 最火有源晶振引脚识别方法介绍木龙骨光电池通用座套润滑油自行车锁Frc
- 最火沙河玻璃降价影响周边玻璃价格镗刀木质线材刻章机中餐厌氧胶Frc
- 最火国际纸业将于3月底关闭苏格兰一家造纸厂0宠物包具定西浴用具焙烤食品过渡接头Frc