3

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

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

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

谢谢

4

1 回答 1

3

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

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

当一个对象被分配给一个声明为特定对象类型的变量时,它是早期绑定的。早期绑定对象允许编译器在应用程序执行之前分配内存并执行其他优化。

相反,当一个对象被分配给一个声明为 Object 类型的变量时,它是后期绑定的。这种类型的对象可以持有对任何对象的引用,但缺乏早期绑定对象的许多优点。

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

TL博士:

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


  • 后期绑定的示例用法:

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

  • 早期绑定的示例用法:

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

在此处输入图像描述


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

相关文章:

于 2018-05-29T12:04:18.587 回答