找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 941|回复: 5

[文章]:自动加载执行vba程序的几种常用方法

[复制链接]
发表于 2003-11-20 18:21:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
以下只是本人在进行vba二次开发过程中对与通过cad命令行执行vba宏的过程中,参考别人的情况下,总结的一些给dvb过程编写快捷命令的方法,希望对新手有一定的帮助。
(例中假设VBA工程为:test.dvb,模块为:edit,过程为:de
1.定义并使用-vbarun来运行:如
(defun c:de()
    (setvar "cmdecho" 0)
    (command "-vbarun" "test.dvb!edit.de")
    (setvar "cmdecho" 1)
(princ)
)
2.通过定义使用vl-vbaload和VL-VBARUN函数来运行,如:
(vl-vbaload (findfile "test.dvb"))
(defun c:de()
    (setvar "cmdecho" 0)
; (vl-vbarun "edit.de")
(princ)
)
3.通过自定义的加载函数及相关词句来完成,如:
(vl-load-com)
;;自动加载VBA程序的函数
(defun AutoVBALoad (cmdname project macro)
  (eval
    (list 'defun
  (read (strcat "C:" cmdname))
  nil
  (list
    'vl-vbarun
    (strcat
      project
      "!"
      (if macro
macro
cmdname
      )
    )
  )
  (princ)
    )
  )
)
;;自动加载VBA程序
(AutoVBALoad "de" "test.dvb" "de")
4.还有一种就是通过VBA中的事件结合定义一个空的LISP程序来完成,如:
;;一些VBA程序的触发程序(LISP程序)
(defun c:de()(princ))
'VBA事件:
Private Sub AcadDocument_BeginLisp(ByVal FirstLine As String)
Select Case UCase(FirstLine)
       Case "(C:de)"
             de
End Select
End Sub

前面三种都是直接加载test.dvb,然后执行过程的。后面一种可以实现先选择后执行和先命令后选择功能,但必须是事先手动加载test.dvb,另外:这些程序可以写入你的和菜单文件相对应的*.mnl文件中,这样就可以象执行cad命令那样来通过命令行来执行自己所编写的vba宏了。本人认为第三种方法是最合适的,如果你愿意强制自己习惯先命令后选择的话
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-12-12 10:51:28 | 显示全部楼层
高手
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-12-19 14:08:51 | 显示全部楼层
说说我的方法:
假设vba工程为test.dvb,存放位置为从c:\test\,自动加载方法如下:

在cad的surport目录中找到acad.dvb,运行vb编辑器,将其代码改成:

Sub ACADStartup()
    Call AcadApplication.RunMacro(".\Sample\VBA\VBAIDEmenu\Custom_menu.dvb!CreateVBAToolBar")
    Call AcadApplication.RunMacro(".\Sample\VBA\VBAIDEmenu\Custom_menu.dvb!VBAIDE_Customization")
    Call AcadApplication.LoadDVB("c:\test\test.dvb")
End Sub

每次启动cad后,程序就会自动加载test.dvb了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-12-19 17:19:31 | 显示全部楼层
其实自动加载dvb工程应该有很多方法,主要的是当我们想用快捷命令操作自己的宏时怎么办,所以喜欢用快捷命令的朋友,还是推荐我在上面推荐的方法。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-12-20 00:28:30 | 显示全部楼层
这个问题困扰我很久了。今天解决真高兴,向高手致敬。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-2-4 15:33:14 | 显示全部楼层
谢谢各位高手!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-26 00:25 , Processed in 0.205289 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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