VBA中的后期绑定与早期绑定 - (CreateObject()vs New)

时间:2018-05-29 11:51:51

标签: vba early-binding

我正在尝试使用VBA代码来调用需要使用OAuth2进行身份验证的受保护API。一旦我尝试打开URL,我就会被重定向到ADFS页面进行身份验证,而不是我回来。

现在,某些使用CreateObject("InternetExplorer.Application")的应用程序和.Navigate URL工作正常,对于其他网络应用,我需要使用New InternetExplorerMedium才能使代码正常运行。

你能否告诉我这些对象之间的区别以及为什么有些网站与其中一个网站合作而另一些网站与另一网站合作?

谢谢

1 个答案:

答案 0 :(得分:2)

这种引用对象的方式称为“早期”和“晚期绑定”。 From MSDN

  

当将对象分配给对象变量时,Visual Basic编译器执行一个称为绑定的过程。

     

将对象分配给声明为特定对象类型的变量时,该对象处于早期绑定状态。早期绑定对象允许编译器在应用程序执行之前分配内存并执行其他优化。

     

相反,当一个对象被赋值为一个声明为Object类型的变量时,它就是后期绑定的。这种类型的对象可以保存对任何对象的引用,但缺少早期绑定对象的许多优点。

     

您应该尽可能使用早期绑定的对象,因为它们允许编译器进行重要的优化,从而产生更高效的应用程序。早期绑定对象明显快于后期绑定对象,并通过准确说明正在使用的对象类型来使代码更易于阅读和维护。

TL DR:

不同之处在于,在 早期绑定 中,您可以获得智能感知和编译时间奖励,但您应该 确保 您已添加相应的库。

  • 后期绑定的使用示例:

首先确保从VBE> Extras> Libraries中添加 MS Excel 16.0对象库

enter image description here

Sub MyLateBinding()

    Dim objExcelApp     As Object
    Dim strName         As String

    'Definition of variables and assigning object:
    strName = "somename"
    Set objExcelApp = GetObject(, "Excel.Application")

    'A Is Nothing check:
    If objExcelApp Is Nothing Then Set objExcelApp = CreateObject("Excel.Application")

    'Doing something with the Excel Object
    objExcelApp.Caption = strName

    MsgBox strName

End Sub
  • 早期绑定的使用示例:
Sub MyEarlyBinding()

    Dim objExcelApp     As New Excel.Application
    Dim strName         As String

    'Definition of variables and assigning object:
    strName = "somename"

    'A IsNothing check:
    If objExcelApp Is Nothing Then Set objExcelApp = CreateObject("Excel.Application")

    'Doing something with the Excel Object
    objExcelApp.Caption = strName

    MsgBox strName

End Sub

相关文章: