Перейти к содержимому
Наше приложение «Дешевые авиабилеты» в AppGallery >>

VBA Excel. Раннее и позднее связывание

    Раннее и позднее связывание переменных с экземплярами внешних и внутренних объектов в VBA Excel. Преимущества ранней привязки объектов. Примеры кода.

    Связывание – это процесс назначения внутреннего или внешнего объекта переменной.

    Внутренними называются объекты, которые принадлежат объектной модели Excel (Range, Sheet, Workbook, Chart). Внешние объекты не принадлежат объектной модели Excel. А также новый экземпляр Excel.Application является внешним объектом по отношению к тому экземпляру приложения Excel, из которого он создается.

    Раннее связывание

    Раннее связывание – это объявление переменной с определенным типом объекта или присвоение переменной, при ее объявлении, нового экземпляра внешнего объекта.

    Определение типа объекта при ранней привязке выполняется еще до запуска приложения.

    Объявление переменной определенного типа

    Объявление переменной с определенным типом объекта:

    При объявлении переменной с определенным типом объекта ранняя привязка уже осуществилась, но чтобы начать работу с переменной, ей необходимо присвоить конкретный (для внутренних объектов) или новый (для внешних объектов) экземпляр объекта с помощью ключевого слова Set:

    Присвоение переменной объекта при объявлении

    Присвоение переменной, при ее объявлении, нового экземпляра внешнего объекта:

    Ссылка на библиотеку внешнего объекта

    Чтобы использовать раннее связывание для внешнего объекта, необходимо подключить в редакторе VBA Excel ссылку на библиотеку этого объекта, если она еще не подключена. Подключается ссылка на библиотеку в окне «References VBAproject», перейти в которое можно через главное меню редактора: Tools–>References…

    Ссылка на библиотеку Microsoft Scripting Runtime, которая необходима для ранней привязки объекта Dictionary:

    Ссылка на библиотеку Microsoft Word Object Library, которая необходима для ранней привязки объекта Word.Application:

    После выбора библиотеки следует нажать кнопку «OK».

    Преимущества ранней привязки

    Главное преимущество раннего связывания заключается в возможности использовать при написании кода VBA Excel лист выбора и вставки свойств-методов привязанных объектов (Auto List Members). Лист подсказок отображается автоматически или вызывается сочетанием клавиш «Ctrl+Пробел» или «Ctrl+J».

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

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

    Скопируйте процедуру Primer1 с ранней привязкой объекта Sheet в любой программный модуль:

    Поставьте точку после mySheet в 3 строке и вы увидите лист выбора и вставки свойств-методов:

    Если вдруг лист подсказок не отобразился автоматически, его можно вызвать сочетанием клавиш «Ctrl+Пробел» или «Ctrl+J».

    Теперь скопируйте процедуру Primer2 с поздней привязкой объекта Sheet в любой программный модуль:

    Поставьте точку после mySheet в 4 строке – лист подсказок не отобразится:

    Сочетания клавиш «Ctrl+Пробел» и «Ctrl+J» тоже не помогут. В данном случае тип объекта, присвоенного переменной, определяется только в процессе выполнения программы.

    Позднее связывание

    Позднее связывание – это присвоение переменной, объявленной как Object, экземпляра внутреннего объекта с помощью ключевого слова Set или экземпляра внешнего объекта с помощью ключевого слова Set и функции GetObject или CreateObject.

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

    Функция CreateObject используется для создания нового экземпляра объекта, а функция GetObject – для получения сохраненного объекта.

    Если проект создается на заказ, следует применять позднее связывание, так как на компьютере пользователя может не оказаться нужной библиотеки. При написании кода используйте раннюю привязку, а когда все будет готово, замените ее на позднюю.
    Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

    2 комментария для “VBA Excel. Раннее и позднее связывание”

    1. сижу и никак не могу понять,
      почему у меня в коде

      никак не вылезает окошечко,
      как на картинке
      после mySheet.
      уже и кнопки нажимаю и библиотеки подключил,
      и файл сохранил.
      смотрю внимательно:
      не Dim mySheet As Sheet
      а Dim mySheet As Sheets
      проверка революционной бдительности, однако)

      не очень понял разницу:
      раннее использует более конкретизированный объект и для него нужна подключённая библиотека
      а позднее более универсальное; при этом присвоение значений внутренним объектам не отличается — так?

      1. Евгений

        При ранней привязке уже при написании кода редактор VBA знает, ссылка на представителя какого класса объектов будет присвоена этой переменной. Информация о свойствах и методах этого класса объектов, в том числе отображаемая в подсказках, извлекается из заранее подключенной библиотеки. Код с ранним связыванием не будет работать, если на компьютере пользователя нет нужной библиотеки, или она есть, но ссылка на нее не подключена в редакторе VBA.

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

    Обсуждение закрыто.