;; ======================================================================================
;; 模块: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)
页:
1
[2]