本帖最后由 作者 于 2004-10-26 7:34:49 编辑
一直以来,VBA程序的加载执行都是大家讨论的热点,而且一直也没有一种非常简单的方法来解决。以下给出的这种方法到目前为止应该是最简单的方法:- (vl-load-com)
- ;;自动加载VBA程序的函数
- ;;本函数由明经通道mccad开发,版权所有,复制使用时请保留版权信息
- (defun AutoVBALoad (app cmdliste / qapp )
- (setq qapp (strcat """ app """))
- (mapcar
- '(lambda (cmd / nom_cmd dot nodotcmd)
- (progn
- (setq dot (vl-string-search "." cmd))
- (if dot
- (setq nodotcmd (substr cmd (+ dot 2)))
- (setq nodotcmd cmd)
- )
- (setq nom_cmd (strcat "C:" nodotcmd))
- (eval
- (read (strcat
- "(defun " nom_cmd "( / rtn)"
- "(if (setq app(fdvbfile " qapp "))"
- "(vl-vbarun (strcat app "!" cmd ""))"
- "(nodvbfile " qapp "))"
- "(princ))"
- )
- )
- )
- )
- )
- cmdliste
- )
- nil
- )
- (defun fdvbfile (app)
- (if (not (findfile app))
- (if (not (findfile (strcat app ".dvb")))
- nil
- (strcat app ".dvb")
- )
- app
- )
- )
-
- (defun nodvbfile (filename)
- (princ (strcat "\n文件 " filename
- "(.dvb) 在搜索路径文件夹中未找到。" ) )
- (princ "\n请检查支持文件的安装,然后重试。")
- (princ)
- )
函数的使用方法就象AutoLISP中的autoload函数:
(AutoVBALoad "dvb文件" 过程名列表))
例如DrawLine.dvb文件中有两个过程,一个在Thisdrawing模块中的Draw2Line过程,一个在Draw模块中的Draw3Line过程。则可以通过以下LISP语句来定义命令,这样则可以在命令行中使用Draw2Line或Draw3Line执行相对应的过程。
(AutoVBALoad "DrawLine" '("Draw2Line" "Draw.Draw3Line"))
|