解决CAD重复加载Acad.lsp的问题

原文链接

当在Acad.lsp 中使用S :: STARTUP和-VBARUN命令来加载,可能导致重复载入Acad.lsp。即使ACADLSPASDOC变量为0,也可能发生这种情况。此时存在的情况是,批量操作会被“宏名称”输入框所中断。

其原因是AutoCAD尚未在S :: STARTUP函数完成初始化,此时命令-VBARUN被调用。

解决方法是,VBASTMT命令允许您从命令行或LISP表达式使用带参数的VBA函数进行调用。在这种情况下,我们可以使用(S :: STARTUP)函数中的(vla-sendcommand)来调用VBA的“ RunMacro”方法。这种方法不会导致Acad.lsp的重新加载

(defun-q mystartup ( )
   (vl-load-com) ;load ActiveX objects
   ;;replace this line: (command ".-vbarun" "MyModule.MySub") 
   ;;with the following:  
   (arxload "acadvba.arx") ;ensure Acad.dvb is loaded
   (vla-sendcommand 
      (vla-get-activedocument (vlax-get-acad-object))
      "vbastmt\n\ThisDrawing.Application.RunMacro \"MyModule.MySub\"\n"
   )
)
(setq s::startup (append s::startup mystartup))
(defun-q mystartup ( )
   (vl-load-com) ;load ActiveX objects
   ; (arxload "acadvba.arx") ;
   (vl-vbaload "C:\\Program Files (x86)\\AutoCAD 2008\\Support\\Pneumatic\\AirBlockExport.dvb") ;ensure Acad.dvb is loaded
   (vla-sendcommand 
      (vla-get-activedocument (vlax-get-acad-object))
      "vbastmt\n\ThisDrawing.Application.RunMacro \"ThisDrawing.CreateVBAToolBar\"\n"
      ; "vbastmt\n\ThisDrawing.Application.RunMacro \"MyModule.MySub\"\n"
   )
)
(setq s::startup (append s::startup mystartup))

以下代码可供参考

(vl-load-com)
(IF (NOT STARTUP-HAS-RUN)
...put your code that would be in acad.lsp here....
...then set the flag to prevcent it running again, and propogate to new drawings...
(setq STARTUP-HAS-RUN 1)
(vl-propagate 'STARTUP-HAS-RUN)
)
QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空