Перейти к содержимому

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

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

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

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

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

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

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

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

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

'Внутренние объекты
Dim myRange As Range
Dim mySheet As Sheets
Dim myWorkbook As Workbook
'Внешние объекты
Dim myDictionary As Dictionary
Dim myExcel As Excel.Application
Dim myWord As Word.Application

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

'Внутренние объекты
Set myRange = Range("A1:D10")
Set mySheet = Sheets(1)
Set myWorkbook = Workbooks.Open("C:\Книга1.xlsm")
'Внешние объекты
Set myDictionary = New Dictionary
Set myExcel = New Excel.Application
Set myWord = New Word.Application

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

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

Dim myDictionary As New Dictionary
Dim myExcel As New Excel.Application
Dim myWord As New Word.Application

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

Чтобы использовать раннее связывание для внешнего объекта, необходимо подключить в редакторе 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 в любой программный модуль:

Sub Primer1()
Dim mySheet As Sheet
mySheet
End Sub

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

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

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

Sub Primer2()
Dim mySheet As Object
Set mySheet = Sheets(1)
mySheet
End Sub

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

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

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

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

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

'Внутренние объекты
'Диапазон ячеек
Dim myRange As Object
Set myRange = Range("A1:D10")
'Рабочий лист
Dim mySheet As Object
Set mySheet = Sheets(1)
'Рабочая книга Excel
Dim myWorkbook As Object
Set myWorkbook = Workbooks.Open("C:\Книга1.xlsm")
'Внешние объекты
'Словарь
Dim myDictionary As Object
Set myDictionary = CreateObject("Scripting.Dictionary")
'Приложение Excel
Dim myExcel As Object
Set myExcel = CreateObject("Excel.Application")
'Приложение Word
Dim myWord As Object
Set myWord = CreateObject("Word.Application")

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

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

Добавить комментарий

Ваш комментарий будет опубликован после прохождения обязательной модерации. Исходящие ссылки не допускаются. Время модерации составит от нескольких минут до нескольких часов в зависимости от времени суток и занятости модератора. При добавлении в комментарий кода VBA Excel, вставьте перед его началом тег [vb] и по окончании кода - [/vb].