调用 VBA 的 AutoLisp 快捷命令在 CAD 2020 中失效
情况是这样的:我有一个auto list 的快捷命令,用来调用vba程序的,在cad2007里面加载是可以的。
在 Cad 2020里面加载就不行,为啥呢 ?
是不是漏了什么步骤?
命令内容:
(defun C:OP() (vl-vbarun "Thisdrawing.OpenPlant"))
(defun C:OE() (vl-vbarun "Thisdrawing.OpenExceL"))
(defun C:SF() (vl-vbarun "Thisdrawing.SShowform"))
直接放代码吧,BKPCL 和 BKBAT 二选一。代码如下:
;; ======================================================================================
;; 模块:AutoCAD VBA 调用函数
;; 功能:
;; - BKPCL:直接加载VBA项目并运行宏,若已加载则出现提示框
;; - BKBAT:先卸载VBA项目,再加载并运行宏,无提示对话框
;; 作者:Pegasus
;; 版本:1.0
;; 日期:2025-09-26
;; ======================================================================================
;; -------------------------- 全局配置 --------------------------
(setq *VBA_PATH* "D:\\...\\文件名.dvb") ;; 修改为你的vba文件名
(setq *VBA_MACRO* "模块名.过程名") ;; 修改为vba代码中的模块名和过程名
;; -------------------------- 内部函数 --------------------------
;; 错误处理函数(恢复环境)
(defun _error-handler (old_cmdecho msg)
(setvar "cmdecho" old_cmdecho)
(command "_.commandline") ; 确保命令行恢复
(if (not (wcmatch (strcase msg) "*CANCEL*,*QUIT*,*EXIT*"))
(princ (strcat "\n执行中断: " msg))
)
(princ)
)
;; 加载VBA项目
(defun _load-vba (vbapath)
(princ (strcat "\n加载VBA项目: " vbapath))
(command "_.vbaload" vbapath)
)
;; 卸载VBA项目
(defun _unload-vba (vbapath)
(princ (strcat "\n卸载VBA项目: " vbapath))
(command "_.vbaunload" vbapath)
)
;; 运行VBA宏
(defun _run-macro (macroname)
(princ (strcat "\n运行宏: " macroname))
(command "_-vbarun" macroname)
)
;; -------------------------- 命令入口 --------------------------
;; 命令:BKPCL(直接加载+运行)
(defun C:BKPCL (/ *error* old_cmdecho)
(defun *error* (msg) (_error-handler old_cmdecho msg))
(setq old_cmdecho (getvar "cmdecho"))
(setvar "cmdecho" 0)
;; 隐藏命令行避免多余提示
(command "_.commandlinehide")
(if (findfile *VBA_PATH*)
(progn
(_load-vba *VBA_PATH*) ; 加载项目
(_run-macro *VBA_MACRO*) ; 运行宏
(princ "\n操作结束(若宏未执行,检查VBA环境是否正常)")
)
(alert (strcat "错误:VBA文件不存在\n路径: " *VBA_PATH*))
)
;; 恢复环境
(command "_.commandline")
(setvar "cmdecho" old_cmdecho)
(princ)
)
;; 命令:BKBAT(先卸载再加载+运行)
(defun C:BKBAT (/ *error* old_cmdecho)
(defun *error* (msg) (_error-handler old_cmdecho msg))
(setq old_cmdecho (getvar "cmdecho"))
(setvar "cmdecho" 0)
;; 隐藏命令行避免多余提示
(command "_.commandlinehide")
(if (findfile *VBA_PATH*)
(progn
(_unload-vba *VBA_PATH*) ; 卸载旧版本
(_load-vba*VBA_PATH*) ; 加载新版本
(_run-macro *VBA_MACRO*) ; 运行宏
(princ "\n操作完成")
)
(alert (strcat "错误:找不到VBA项目文件\n" *VBA_PATH*))
)
;; 恢复环境
(command "_.commandline")
(setvar "cmdecho" old_cmdecho)
(princ)
)
;; ======================================================================================
(princ "\n已加载 VBA 调用工具 (BKPCL / BKBAT)")
(princ) mikewolf2k 发表于 2024-3-5 13:06
先手工执行vba看看有没有问题,一步步的查错。
VBA 模块我已经安装了,还在里面调试过代码。应该不是 VBA 的问题,,,,
另外,这个 autolisp 的快捷命令,在 cad 2007 是可以的。
在 2016、2020 cad 中加载成功了,但是命令没有生效。 你有种再说一遍 发表于 2024-3-2 21:26
要改的东西可能很多,VBA是com模型,不如两个语言都放一放.
来耍c#...毕竟这边有共享内存和管道通讯,就不要 ...
关键是为什么2007里面可以。2020里面就不行了呢? 要改的东西可能很多,VBA是com模型,不如两个语言都放一放.
来耍c#...毕竟这边有共享内存和管道通讯,就不要用com模型通信了...嘿嘿 直接用lisp不行吗 dcl1214 发表于 2024-3-3 10:33
直接用lisp不行吗
为之前都是用vb写代码的多。所以就用了vba。插件已经写好了。就不想换语言了。:lol 高版本的CAD,想运行vba需要安装vba模块 先手工执行vba看看有没有问题,一步步的查错。 陨落 发表于 2024-3-4 15:58
高版本的CAD,想运行vba需要安装vba模块
VBA 模块我已经安装了,还在里面调试过代码。
应该不是 VBA 的问题,,,, lisp没有加载com支持吧,(vl-load-com)
页:
[1]
2