在Excel中后期绑定VBIDE.VBE

Jak*_*e88 7 excel vba excel-2007 excel-vba

是否可以在Excel中后期绑定VBIDE.VBE对象?例如:

Dim VBAEditor As VBIDE.VBE
Run Code Online (Sandbox Code Playgroud)

而是变成类似于此的东西(后期绑定):

Dim VBAEditor As Object: set VBAEditor = CreateObject ("VBIDE.VBE")
Run Code Online (Sandbox Code Playgroud)

我的目标是避免必须手动选中"Microsoft Visual Basic for Applications Extensibility 5.3"参考的复选框.

使用下面的反馈,我能够以编程方式动态添加"Microsoft Visual Basic for Applications Extensibility 5.3"参考.解决方案如下:

Sub mainFunction()

    Call AddLib("VBIDE", "{0002E157-0000-0000-C000-000000000046}", 5, 3)

    ' Bunch of working code goes here

End Sub

'******************************************************************************
'AddLib: Adds a library reference to this script programmatically, so that
'        libraries do not need to be added manually.
'******************************************************************************
Private Function AddLib(libName As String, guid As String, major As Long, minor As Long)

    Dim exObj As Object: Set exObj = GetObject(, "Excel.Application")
    Dim vbProj As Object: Set vbProj = exObj.ActiveWorkbook.VBProject
    Dim chkRef As Object

    ' Check if the library has already been added
    For Each chkRef In vbProj.References
        If chkRef.Name = libName Then
            GoTo CleanUp
        End If
    Next

    vbProj.References.AddFromGuid guid, major, minor

CleanUp:
    Set vbProj = Nothing
End Function
Run Code Online (Sandbox Code Playgroud)

对这篇关于excel中动态引用的堆栈文章深感启发.

bre*_*tdj 5

是的,按照Excel 表单:识别可以使用后期绑定的未使用代码

Dim VBProj
Dim VBComp
Set VBProj = ActiveWorkbook.VBProject
For Each VBComp In VBProj.vbcomponents
Run Code Online (Sandbox Code Playgroud)

ETC

  • @Jake88后期绑定意味着你*不*声明`As VBIDE。*`,并且*不*为你正在使用的任何对象的成员获取IntelliSense,这意味着你最好像手掌一样了解API你的手。`VBIDE.VBE` 是 API 的“根”对象;它有一个包含“VBProject”对象的“.VBProjects”集合,其中一个对象对应于“ActiveWorkbook.VBProject” - 请注意,必须在主机应用程序(Excel)中启用一项安全设置才能允许访问该对象。 (3认同)