Позднее связывание против раннего связывания в VBA - (CreateObject () против нового) - PullRequest
0 голосов
/ 29 мая 2018

Я пытаюсь использовать код VBA для вызова защищенного API, который требует аутентификации с помощью OAuth2.После того, как я пытаюсь открыть URL-адрес, меня перенаправляют на страницу ADFS для аутентификации, а затем я возвращаюсь.

Теперь для некоторых приложений, использующих CreateObject("InternetExplorer.Application") и .Navigate URL, работает нормально, для других веб-приложений.Мне нужно использовать New InternetExplorerMedium, чтобы код работал.

Можете ли вы сказать мне различия между этими объектами и почему некоторые веб-сайты работают с одним, а другие - с другим?

Спасибо

1 Ответ

0 голосов
/ 29 мая 2018

Этот способ обращения к объектам называется «Раннее» и «Позднее связывание». Из MSDN :

Компилятор Visual Basic выполняет процесс, называемый связыванием, когда объект назначается переменной объекта.

Объект рано связывается, когда онприсваивается переменной, объявленной как объект определенного типа.Объекты с ранней привязкой позволяют компилятору выделять память и выполнять другие оптимизации перед выполнением приложения.

В отличие от этого, объект с поздней привязкой присваивается переменной, объявленной как тип Object.Объекты этого типа могут содержать ссылки на любой объект, но лишены многих преимуществ объектов с ранней привязкой.

Вы должны использовать объекты с ранней привязкой, когда это возможно, потому что они позволяют компилятору выполнять важные оптимизации, которые приводят кболее эффективные приложения.Объекты с ранней привязкой значительно быстрее, чем объекты с поздней привязкой, и облегчают чтение и поддержку вашего кода, точно указав, какой тип объектов используется.

TL DR:

Разница в том, что при раннем связывании вы получаете intellisense и бонус времени компиляции, но вы должны убедиться, что добавили соответствующую библиотеку.


  • Пример использования позднего связывания :

Сначала убедитесь, что вы добавили библиотеку объектов MS Excel 16.0 из VBE> Доп. Функции> Библиотеки:

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

Статьи по теме:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...