有什么方法可以检测一个VBA宏是否加载压痕机
发布时间:2022-06-25 20:49:29
有什么方法可以检测一个VBA宏是否加载?
有什么方法可以检测一个VBA宏是否加载? 2011年12月10日 来源: 在AutoCAD 2000中,你可以获取一个属性名叫VBE的ActiveX应用程序对象。它使你可以访问VBAIDE扩展对象。这个对象拥有方法和属性允许你判断一个工程是否已经加载。 如果你想深入学习,就请启动VBAIDE,添加一个对"Microsoft Visual Basic for Applications Extensibility"的引用,然后你就可以在你的ObjectBrowser (F2)浏览此对象了。 以下是四个例子。第一个"loadMyProcedure"检测所有已经加载的工程名。如果没有发现"TestMenuEcho",就加载它。 第二个例子"testMacros"在每一个加载的模块中搜索每一行并且在立即窗口中 (cntrl + G)打印true或者false。目的在于寻找文本"test4"(宏的名字)。 第三个例子"displayLoadedProjects"在信息窗口中显示所有已加载的工程。 第四个例子是一个LISP例程。它使用相同的ActiveX对象判断一个工程是否已经加载,如果没有,就加载它。 Public Sub loadMyProcedure() Dim int1 As Integer Dim bProjectLoaded As Boolean ' Iterate through all the projects For int1 = 1 To Application.VBE.VBProjects.Count ' Make the test boolean variable to true if the Project I want to load ' is already loaded, Change TestMenuEcho to the name of your project If Application.VBE.VBProjects(int1).Name = "TestMenuEcho" Then ' Debug.Print Application.VBE.VBProjects(int1).Name bProjectLoaded = True End If Next int1 ' Display a message if my the project is already loaded ' if it isn't then load it, change the directory and ' name to that of your project If bProjectLoaded = True Then MsgBox "TestMenuEcho is already loaded" Else MsgBox "Going to load the project TestMenuEcho" Application.LoadDVB "D:\Vba-apps\a-2000\menuecho in menu.dvb" End If End Sub Public Sub testMacros() Dim int1 As Integer Dim int2 As Integer ' Iterate through all the loaded projects For int1 = 1 To Application.VBE.VBProjects.Count ' Name of loaded project Debug.Print Application.VBE.VBProjects(int1).Name ' Iterate through the text of each module looking for "test4" For int2 = 1 To Application.VBE.VBProjects(int1).VBComponents.Count ' Get the number of lines in each module - use in the ' find method below Dim L As Long L = Application.VBE.VBProjects(int1).VBComponents(int2) _ .CodeModule.CountOfLines Debug.Print Application.VBE.VBProjects(int1).VBComponents(int2) _ .CodeModule.Find("test4", 1, 1, L, 1, False, False) Next int2 Next int1 End Sub Public Sub displayLoadedProjects() Dim strProjectNames Dim int1 As Integer strProjectNames = "Names of loaded projects " & vbCrLf For int1 = 1 To Application.VBE.VBProjects.Count strProjectNames = strProjectNames + Application.VBE.VBProjects(int1).Name & vbCrLf Next int1 MsgBox strProjectNames End Sub (defun c:loadMyProject () ;; This routine will load a project if it is not already loaded ;; the VBE (VB extensibility) ActiveX object is used to reference ;; the loaded projects ;; Load ActiveX(vl-load-com) ;; Get the VBE extisibility object(setq acadObject (vlax-get-acad-object)) (setq acadVbe (vla-get-vbe acadObject)) (setq acadVbeProjects (vlax-get-property acadVbe 'VBProjects)) ;; Get the number of loaded VBA projects (setq int1 (vlax-get-property acadVbeProjects 'count)) ;; Counter and test variable named loaded(setq int2 1) (setq loaded "False") ;; Repeat for each project(repeat int1 ;; Itereate through the projects, getting the name of ;; next project, each time through(setq Item (vlax-invoke-method acadVbeProjects 'Item int2)) (setq pName (vlax-get-property Item 'Name)) ;; Test the name for the name of the project I want to load ;; If it is already loaded the set the test variable to True (if (= pName "my_test_project") (progn (prompt "\nmy_test_project is already loaded\n") (Setq Loaded "True")
- 上一页:ERP之科思模式输送机
- 下一页:93AH型监控装置通信故障的分析与处理洗地机
- 最好中基国威遥控强势来袭瓷片电容光连接器量器数控雕铣机用户终端盒TRp
- 最火金川集团亮相2011中国青海绿色经济投资锻钢剪断机瓶模具温度表钻铤TRp
- 最好河南新乡冷沥青砂让罐底防腐垫层坚若磐石D型卸扣多层电路板江阴栖霞涡轮叶片TRp
- 最好晋州钢制暖气片批发家用暖气片泵体风淋室井口装置曲靖消磁线圈TRp
- 最火暂时忘却繁琐的配制标准气体工作超声换能器个旧拉钉伸缩舞台摇臂钻TRp
- 最好银邦全资子公司银邦防务签订战略合作协议东阳检测机平垫圈微型发电机综合布线TRp
- 最火今日铅价格行情查询11111114电视遥控器机箱机柜凝露控制器铜包铝线重庆Rra
- 最火墨西哥拟议钢铁产品安全标准标准卡浮标绝缘变压器热管新郑Rra
- 最火中铝公司党组中心组召开学习扩大会传达贯彻端子压接机剪刀屏幕刷渭南组合轴承Rra
- 最火墨西哥拟议钢铁产品安全标准涉及镀锌不锈钢泵阀风力发电精密铸件球轴承橡胶设备Rra
- 最火13日福州市场钢塑复合管价格行情雕版机集水槽配线架脱粒机转盘Rra
- 时最7月29日靖江市场普碳废钢价格行情电控柜环垫片磨边机特种变压器直线轴承Frc