明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: Oceanable

调用 VBA 的 AutoLisp 快捷命令在 CAD 2020 中失效

[复制链接]
发表于 2024-5-5 16:44:28 | 显示全部楼层
(defun C:OP() (command "-vbarun" "文件标识.dvb!模块名.宏名"))

点评

实践证明autocad2019这样用有问题,在bricscad下就没有问题。说明acad差劲  发表于 2024-8-6 08:56
发表于 2024-5-5 16:46:32 | 显示全部楼层
这样调用CAD命令的就不需要加载vlisp com支持模块
发表于 2024-7-28 11:16:39 来自手机 | 显示全部楼层
一年过去了,楼主解决没有?
发表于 2024-7-28 11:17:46 来自手机 | 显示全部楼层
是不是32位64 位的问题
发表于 昨天 22:15 | 显示全部楼层
直接放代码吧,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)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-9-27 03:17 , Processed in 0.177853 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表