wuyunpeng888 发表于 2024-5-5 16:44:28

(defun C:OP() (command "-vbarun" "文件标识.dvb!模块名.宏名"))

wuyunpeng888 发表于 2024-5-5 16:46:32

这样调用CAD命令的就不需要加载vlisp com支持模块

自贡黄明儒 发表于 2024-7-28 11:16:39

一年过去了,楼主解决没有?

自贡黄明儒 发表于 2024-7-28 11:17:46

是不是32位64 位的问题

Pegasus 发表于 2025-9-26 22:15:27

直接放代码吧,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)
页: 1 [2]
查看完整版本: 调用 VBA 的 AutoLisp 快捷命令在 CAD 2020 中失效