Vba 在excel中后期绑定VBIDE.VBE

Vba 在excel中后期绑定VBIDE.VBE,vba,excel,excel-2007,Vba,Excel,Excel 2007,是否可以在Excel中后期绑定VBIDE.VBE对象?例如: Dim VBAEditor As VBIDE.VBE 相反,会变成类似于此(后期绑定): 我的目标是避免手动进入“Microsoft Visual Basic for Applications Extensibility 5.3”参考的复选框 解决方案 使用下面的反馈,我能够以编程方式动态添加“MicrosoftVisualBasic for Applications Extensibility 5.3”引用。解决办法如下: Sub

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

Dim VBAEditor As VBIDE.VBE
相反,会变成类似于此(后期绑定):

我的目标是避免手动进入“Microsoft Visual Basic for Applications Extensibility 5.3”参考的复选框

解决方案 使用下面的反馈,我能够以编程方式动态添加“MicrosoftVisualBasic 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
我的灵感来自于

是的,因为你可以使用后期绑定

Dim VBProj
Dim VBComp
Set VBProj = ActiveWorkbook.VBProject
For Each VBComp In VBProj.vbcomponents

etc

在我的代码中,我当前使用
Dim vbProj作为VBIDE.VBProject
VBAEditor作为VBIDE.VBE
。VBAEditor允许我检查IDE本身中当前配置的引用。它们似乎不是同一个对象。我可以将VBAEditor作为VBProject使用吗?@Jake88延迟绑定意味着您没有将
声明为VBIDE.*
,也没有为您正在使用的任何对象的成员获取IntelliSense,这意味着您最好对API了如指掌
VBIDE.VBE
是API的“根”对象;它有一个
.VBProjects
集合,其中包含
VBProject
对象,其中一个对象对应于
ActiveWorkbook.VBProject
——请注意,主机应用程序(Excel)中必须启用一个安全设置,才能访问该对象。好的,我想这一切都正常了。我将分享我在上述问题中试图做的事情。你为什么需要这样做?该引用在所有版本中都是相同的,您可以选择延迟绑定。@Rory,我想让人们更容易在excel文档中导入和使用我的脚本。这是我之所以移动到GUID的另一个原因,原因与您所述的相同;GUID引用在所有版本中都是相同的。我需要在上面的代码中保留
chkRef
,以避免与正在使用的“同名对象”相关的错误。上面的代码做了我现在需要它做的事情。为什么不晚绑定呢?它简单得多,不需要在信任中心进行任何特定的用户设置,这与您正在做的不同。@Rory,我明白您提到的后期绑定。我已将上面的代码更改为延迟绑定excel应用程序。但是,我对API不太熟悉,因此无法延迟绑定VBProject以绕过信任设置。任何提示、文档或建议都将不胜感激。您不能。对VBProject的任何访问都需要设置受信任的访问权限。(我想我误解了你的意图,以为你只想访问设置参考)
Dim VBProj
Dim VBComp
Set VBProj = ActiveWorkbook.VBProject
For Each VBComp In VBProj.vbcomponents