找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 466|回复: 3

[求助]:VBA工程加载

[复制链接]
发表于 2004-7-4 15:31:21 | 显示全部楼层 |阅读模式

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

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

×
cad中用vba编制工程,加载命令很不方便,vba无法注册系统命令,我一般编制一个lsp文件,通过该文件定义命令,如
(defun C:ETDAD ()
        (command "_-vbarun" "dimArrowDot")
)
但当vba代码很多时,分别从属于多个dvb文件,我想在函数中添加代码首先判断该dvb是否加载,没有加载则加载,然后执行该dvb中的相关宏,以实现动态加载,请帮帮我?vba我懂,但lsp则只知皮毛!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-7-4 20:35:27 | 显示全部楼层
直接给全路径即可,如:
(command "_-vbarun" "c:\Test.dvb!dimArrowDot")
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-7-5 20:51:56 | 显示全部楼层
谢谢,我已经直接通过vba工程解决了,代代码如下:可直接通过菜单加载.
由此可实现多模块动态加载,卸载,并可动态构造菜单
Public Function GetVBAProjFileNames(Optional projName As String = "")
    Dim i As Long, projects() As String
    Dim objIDE As VBIDE.VBE
    Set objIDE = Application.VBE
    ReDim projects(0 To objIDE.VBProjects.Count - 1)
    For i = 0 To objIDE.VBProjects.Count - 1
        projects(i) = objIDE.VBProjects(i + 1).fileName
    Next
    If projName = "" Then
        '未指定则返回全部
        GetVBAProjFileNames = projects
        Exit Function
    Else
        '返回特定
        Dim length As Long
        If Right(projName, 4) <> ".dvb" Then projName = projName & ".DVB"
        length = Len(projName)
        For i = 0 To objIDE.VBProjects.Count - 1
            If Right(projects(i), length) = projName Then
                GetVBAProjFileNames = projects(i)
                Exit Function
            End If
        Next
        '未找到特定,则返回空
        GetVBAProjFileNames = ""
    End If
End Function
Sub AddmainMenu()
    Dim MenuGroup As AcadMenuGroup
    Dim etMainMenu As AcadPopupMenu
    Dim menuItem
    Set MenuGroup = Application.MenuGroups("ACAD")
    On Error Resume Next
    Set etMainMenu = MenuGroup.Menus(APPName)
    If err.Number = 0 Then
        On Error GoTo 0
        For Each menuItem In etMainMenu
            menuItem.Delete
        Next
    Else
        On Error GoTo 0
        Set etMainMenu = MenuGroup.Menus.Add(APPName)
    End If
    etMainMenu.AddMenuItem 1, "xxxxxxxxxxxx", "-vbarun DoUtility acadet FixLayOutScale" & vbCr
     If Not etMainMenu.OnMenuBar Then etMainMenu.InsertInMenuBar Application.MenuBar.Count - 1
End Sub

'主执行模块
Public Sub DoUtility()
    Dim strModul As String, strVbaSub As String
    strModul = ThisDrawing.Utility.GetString(False)
    strVbaSub = ThisDrawing.Utility.GetString(False)
    If GetVBAProjFileNames(strModul) = "" Then
        '判断模块是否存在,不存在则加载
        Application.LoadDVB GetETToolsPath & strModul & ".dvb"
    End If
    ThisDrawing.SendCommand "-VBARUN" & " " & strVbaSub & vbCrLf
End Sub

Function GetETToolsPath() As String
    Static etToolsPath As String
    If etToolsPath = "" Then
        etToolsPath = GetVBAProjFileNames("ACADET.DVB")
        etToolsPath = Left(etToolsPath, Len(etToolsPath) - 10)
    End If
    GetETToolsPath = etToolsPath
End Function
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 181个

财富等级: 日进斗金

发表于 2004-7-5 22:39:19 | 显示全部楼层
构思不错,借助于VBE,可以定制和扩充VBA的功能。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-29 09:27 , Processed in 0.366588 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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