明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1761|回复: 7

怎样在一打开AUTOCAD就可以自动加载VBA?

[复制链接]
发表于 2004-7-12 10:06:00 | 显示全部楼层 |阅读模式
怎样在一打开AutoCAD就可以自动加载VBA?
发表于 2004-7-12 11:23:00 | 显示全部楼层
把VBA文件加入启动组


或者在AutoCad200?Doc.lsp文件中加载,


或者引用时给全,以"路径名!模块名.过程名"的形式调用
 楼主| 发表于 2004-7-12 14:48:00 | 显示全部楼层
详细一点,好吗?
发表于 2004-7-12 16:14:00 | 显示全部楼层
用 自动加载 搜索一下就一大堆 http://bbs.mjtd.com/forum.php?mod=viewthread&tid=16373
 楼主| 发表于 2004-7-12 17:26:00 | 显示全部楼层
解释一下这个程序的使用方法: [U]“你把函数复制到acad2000doc.lsp文件中,以后每写一个VBA程序,就可以通过写入一行: (AutoVBALoad <命令名> <工程文件> <宏>)
来自动调用[/U]
每写一个VBA程序,把”(AutoVBALoad <命令名> <工程文件> <宏>) “写到什么地方?我看不懂,谢谢! [WEB]http://www.mjtd.com/a2/list.asp?id=285[/WEB]
发表于 2004-7-12 17:50:00 | 显示全部楼层
写到Acad200?Doc。lsp文件里 改进一下,做成命令,:) (defun C:Sub2Cmd( / subname cmdname)
(setq subname (getstring "\n输入宏名:")
cmdname (getstring "\n输入命令名:"))
(eval
(list 'defun
(read (strcat "C:" cmdname))
nil
(list 'vl-vbarun subname)
(princ)
))
) (vlax-add-cmd "Sub2Cmd" 'C:Sub2Cmd)
发表于 2004-7-12 19:41:00 | 显示全部楼层
我的看法不用那么复杂,在ACAD.DVB的ThisDriwing模块里的ACADStartup过程里加上如下一句


AcadApplication.LoadDVB "d:\acad2000\support\User.dvb"


即可
发表于 2004-7-12 21:57:00 | 显示全部楼层
不做成命令总是很复杂的,:)下面的代码可以把工程的所有Sub注册为命令,前提是工程未加密,:)Lisp代码
  1. (defun C:Sub2Cmd( / subname cmdname)
  2.   (setq subname (getstring T "\n输入宏名:")
  3.              cmdname (getstring T "\n输入命令名:"))
  4.    (eval
  5.        (list 'defun
  6.        (read (strcat "C:" cmdname))
  7.        nil
  8.        '(setvar "cmdecho" 0)
  9.        (list 'vl-vbarun subname)
  10.        '(setvar "cmdecho" 1)
  11.        (princ)
  12.    ))
  13. )
  14. (vlax-add-cmd "Sub2Cmd" 'C:Sub2Cmd)
Vba代码
  1. Public Sub RegAllSub()
  2. On Error Resume Next
  3. Dim pVbe As Object, pCode As Object
  4. Dim i, j, k
  5. Set pVbe = Application.VBE
  6. For Each i In pVbe.VBProjects
  7.        For Each j In i.VBComponents
  8.                If j.Type = 1 Or j.Type = 100 Then
  9.                        Set pCode = j.CodeModule
  10.                        For k = 1 To pCode.CountOfLines
  11.                                pCodeLine = pCode.Lines(k, 1)
  12.                                If (InStr(Trim(pCodeLine), "Public Sub ") = 1 Or InStr(Trim(pCodeLine), "Sub ") = 1) And InStr(pCodeLine, ")") = InStr(pCodeLine, "(") + 1 Then
  13.                                        pSubName = Trim(RightStr(LeftStr(pCodeLine, "()"), "Sub "))
  14.                                        ThisDrawing.SendCommand "Sub2Cmd" & vbCr & i.FileName & "!" & j.Name & "." & pSubName & vbCr & pSubName & vbCr
  15.                                End If
  16.                        Next k
  17.                End If
  18.        Next j
  19. Next i
  20. End Sub
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-28 04:44 , Processed in 0.183187 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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