手帕厂家
免费服务热线

Free service

hotline

010-00000000
手帕厂家
热门搜索:
技术资讯
当前位置:首页 > 技术资讯

当如何在AutoLISP调用完一个VBA宏

发布时间:2021-09-14 19:43:36 阅读: 来源:手帕厂家

如何在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来卸载其本身。

云母纸拉力试验机
硬质塑料板断裂强度试验机
冶金球团压力试验机
型煤抗压强度试验机