MR MAN 发表于 2022-7-6 17:17:20

Vbaload Lisp

如何加载。dvb文件的VBALOAD,然后运行它的VBARUN所有的一个LISP?

rkmcswain 发表于 2022-7-6 17:37:24


(vl-vbarun "filename.dvb!module.sub")

 
另请参见:http://www.caddzone.com/autovbaload.lsp

MR MAN 发表于 2022-7-6 17:43:59

它不工作,因为我必须加载。运行前的dvb文件
谢谢你的帮助

rocheey 发表于 2022-7-6 17:47:43

>>(vl vbarun“filename.dvb!module.sub”))
 
>>它不工作,因为我必须加载。运行前的dvb文件
 
它只需要稍微调整一下,仅此而已。从结尾去掉第二个圆括号,并使用*双*斜杠将完整驱动器\路径名放在那里。
例如:
 
您有一个名为“MyProgram.dvb”的VBA程序,位于名为“Y:\MyFolder”的驱动器文件夹中
 
VBA程序希望运行名为“MySub”的子程序,该子程序位于代码模块“MyModule”中
 
加载命令的格式如下:
 

(vl-vbarun "Y:\\MyFolder\\MyProgram.dvb!MyModule.MySub")

 
 
 
 
 
 

ASMI 发表于 2022-7-6 17:58:25

您可以使用:
 
(defun Load_And_Run_VBA(File Procedure / cFile)

(vl-load-com)
   
(defun Get_VBP_List(/ cPr cPat VBPrj pQnt pCnt prLst)
   
   (setq VBPrj(vlax-get
       (vla-get-VBE
          (vlax-get-acad-object))
           'VBProjects)
pQnt(vla-get-Count VBPrj)
pCnt 1)
   (repeat pQnt
   (setq cPr(vla-Item VBPrj pCnt))
      (if(vl-catch-all-error-p
    (setq cPat(vl-catch-all-apply
        'vlax-get(list cPr 'FileName))))
(setq prLst(cons "*Invalid Project*" prLst))
(setq prLst(cons cPat prLst))
); end if
   (setq pCnt(1+ pCnt))
   ); end repeat
   prLst
   ); end of Get_VBP_List

(if(setq cFile(findfile File))
   (progn
    (if(not(member cFile(Get_VBP_List)))
      (vl-vbaload cFile)
      ); end if
      (vl-vbarun Procedure)
    ); end progn
   (princ
   (strcat "\n<!> Can't to find VBA Project: '"
        File "' <!> "))
   ); end if
(princ)
); end of Load_And_Run_VBA
 
例如:
 
(Load_And_Run_VBA "C:\\My VBA Routines\\My program.dvb" "MyProcedure")
 
此代码检查已加载*的列表。dvb文件和加载VBA程序仅一次,但每次都会运行。

rkmcswain 发表于 2022-7-6 18:15:38

 
错误的该示例将加载DVB文件并运行指定的宏。如果DVB不在支持文件搜索路径中,则需要指定路径,如下所示:
 

(vl-vbarun "\\\\server\\share\\dir\\filename.dvb!module.sub")

MR MAN 发表于 2022-7-6 18:25:01

谢谢大家,我在附件中制作了Lisp,效果很好,我需要你们的帮助。再次感谢
VB。LSP
页: [1]
查看完整版本: Vbaload Lisp