当在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)
)
网友评论