Основы программирования на VBA для Microsoft Excel. Учебное пособие
.pdfОни являются главными объектами. Все остальные объекты приложений встроены в приложения как их компоненты.
Объекты приложений, как и объекты самого языка VBA, объединены в структуры, называемые объектными моделями.
Объектная модель приложения Excel и доступ к объектам
Приложение Microsoft Office Excel содержит множество объектов, которые организованы в иерархическую структуру. Такая структура называется объектной моделью. В ней объекты связаны между собой отношением встраивания.
В объект самого верхнего уровня встроены объекты, составляющие первый уровень иерархии. В каждый из объектов верхнего и первого уровней могут быть встроены объекты следующего уровня и т. д.
Встраивание объектов реализуется с помощью их свойств. Свойства, которые при их вызове возвращают объекты, называются свой- ствами-участниками. Свойства, которые при их вызове не возвращают объектов, называются терминальными свойствами.
Объектная модель наглядно показывает состав объектов приложения и связи между ними. На практике, после записи имени объекта, входящего в структуру этой модели, и установки в качестве разделителя точки, система программирования предлагает список объектов или методов, которые принадлежат данному объекту. Это исключает необходимость помнить имена элементов, подчиненных данному объекту.
Упрощенная схема объектной модели Excel показана на рис. 1. Подобные модели входят в состав и других приложений MS Office и отличаются от модели Excel набором объектов и связями между ними.
На верхнем уровне объектной модели Excel, как и всех других приложений MS Office, находится самый главный (корневой) объект – Application (Приложение). Он является контейнером для всех остальных объектов модели, т. е. все остальные объекты вложены в него и считаются его свойствами.
Кроме одиночных объектов в состав объектной модели могут входить совокупности однотипных объектов. Эти совокупности называют коллекциями, или семействами. Объекты, представляющие собой коллекции, используются в тех случаях, когда требуется обработать несколько объектов одновременно.
11
Application (Приложение)
Workbooks [Workbook] (Рабочие книги)
Worksheets [Worksheet] (Рабочие листы)
Range (Диапазон ячеек)
Charts [Chart] (Диаграммы)
Другие объекты Надстройки Другие объекты
Рис. 1. Упрощенная схема объектной модели Excel
Из объектной модели Excel видно, что объект Application содержит коллекцию объектов Workbooks (Рабочие книги), каждый экземпляр которой, т. е. отдельная книга (Workbook), содержит коллекцию объектов Worksheets (Рабочие листы).
Всвою очередь, каждый экземпляр коллекции Worksheets, т. е отдельный рабочий лист (Worksheet), содержит объект Range (Диапазон). В общем случае он может включать все ячейки рабочего листа.
Вобъектной модели Excel существуют также коллекции Rows и Columns, представляющие собой все строки и все столбцы рабочего листа. Объекты Cell, Row и Column в объектной модели Excel не существуют. Вместо них используется объект Range.
Имя коллекции в отличие от имени одиночного объекта записывается во множественном числе, с дополнительной буквой s в конце имени. Исключение составляет имя коллекции Range.
Отличительными признаками коллекции является также наличие свойства Count и методов Add, Remove, Close, Delete, Item. Свойство
Count возвращает число объектов набора. Метод Add используется для добавления новых объектов в набор, а методы Remove, Close, Delete позволяют удалять объекты из набора.
Метод Item обеспечивает доступ к конкретному объекту семейства по имени или по индексу. Этот метод используется по умолчанию. Именно поэтому можно вместо Selection.Cells.Item(4), записать Selection.Cells(4).
12
Как правило, доступ к конкретному экземпляру коллекции обеспечивается указанием индекса – номера, определяющего положение объекта в коллекции, например, запись
Application.Workbooks(1).Worksheets(1)
обеспечивает доступ к первому рабочему листу первой рабочей книги приложения.
Доступ к экземпляру коллекции можно обеспечить и с помощью имени конкретного объекта, например:
Application.Workbooks("Книга1").Worksheets("Лист1")
Кроме перечисленных объектов в состав объектной модели Excel входит коллекция объектов Charts (Диаграммы), объект РivоtТab1е (Сводная таблица) и др.
Корневой объект служит отправной точкой для движения к конкретному объекту модели. При ссылке на объект, вложенный в другой объект, положение в иерархической структуре объектной модели задается с помощью точки-разделителя, например, для доступа к ячейке A3 можно использовать ссылку
Application.Workbooks(1).Worksheets(1).Cells(1,3) = "=a1+b1"
Если ссылка на объект опущена, то по умолчанию используется активный объект. Например, для доступа к этой же ячейке активного листа можно просто использовать ссылку Cells(1,3) .
Доступ к активному объекту можно получить, не применяя имени объекта или его индекса. Для этого в ссылке достаточно указать свойство объекта ActiveSheet. Например, для обращения к ячейке активного листа Excel достаточно указать ссылку
Application.ActiveSheet.Cells(3) = "=a1+b1"
или ActiveSheet.Cells(3) = "=a1+b1"
Рассмотренные примеры относятся к прямым методам доступа. Однако существует и альтернативный способ доступа к объекту через объектную переменную. Например:
Dim R As Range
Set R = ActiveSheet.Rows(1) R.Font.Bold=True
13
Использование объектной переменной, в данном случае R, существенно упрощает запись выражений и улучшает читаемость кода. Ключевое слово Set применяется во всех случаях, когда переменной присваивается ссылка на объект.
Объектная переменная может быть объявлена и с типом Object, например, Dim R As Object. В этом случае изначально не известно, ссылку на объект какого типа будет содержать переменная. Конкретное значение ссылки становится известным позже, после присвоения переменной какого-либо значения.
Если объектная переменная имеет ссылку на объект определенного типа, то редактор VBA предоставляет возможность использования при написании программ автоматического списка (Auto List) методов и свойств данного объекта.
Для подключения Auto List необходимо выполнить команду Tools/ Option и в открывшемся окне установить флажок Auto List Members (Автоматическое отображение списка компонентов).
При подключенном Auto List после набора имени объектной переменной и следующей за ним точки редактор отобразит список методов и свойств этого объекта. Из числа этих компонентов можно выбрать требуемый компонент.
Для уменьшения объема кода часто используют оператор With, например:
Dim F As Font
Set F = ActiveSheet.Rows(1).Font With F
.Bold=True
.Size=12 End With
Здесь свойства Bold и Size относятся к объекту, но при их использовании не требуется каждый раз записывать имя объекта.
Применение объектной переменной дает выигрыш и в скорости выполнения программы. Использование прямой ссылки на объект требует распознавания этой ссылки каждый раз, когда она применяется. При использовании объектной переменной ссылка распознается только один раз и скорость выполнения программы при этом возрастает.
Объектная переменная отличается от обычной переменной тем, что содержит адрес ссылки на объект. По этой причине объектные перемен-
14
ные часто называют переменными-указателями. Обращение к объекту может осуществляться с помощью разных объектных переменных.
В отличие от обычных переменных, объектные переменные можно сравнить только с применением ключевого слова Is. Например, выражение R1 Is R2 дает значение Истина, если объектные переменные указывают на один и тот же объект, и Ложь в противном случае. Аналогичным образом можно проверить, свободна ли объектная перемен-
ная: R Is Nothing.
Для очистки значения объектной переменной и удаления объектов используется ключевое слово Nothing. Например:
Set R= Nothing
Если объектная переменная объявлена, но не инициализирована ссылкой на конкретный объект, то ей также присваивается значение
Nothing.
Если все ссылки на объект закрыты путем присвоения объектной переменной значения Nothing, то память, выделенная под этот объект, освобождается. Некоторые объекты требуют для своего удаления применения специального метода Quit().
Для проверки того факта, что объектная переменная ссылается в никуда, т. е. имеет значение Nothing, используется условный оператор в сочетании с выражением Is Nothing. Пример:
Dim R As Range
If R Is Nothing Then
Set R = ActiveSheet.Rows(1) R.Font.Bold=True
End If
Таким образом, объектная модель позволяет легко ориентироваться
всоставе и связях объектов, на основе которых строится приложение.
Сучетом того, что VBA предлагает выбор объектов или методов, принадлежащих конкретному объекту, процесс программирования существенно облегчается.
Объект Application (Приложение)
Объект Application.Excel представляет собой все приложение Excel и находится на самом верхнем уровне объектной модели Excel. При запуске Excel этот объект создается автоматически и становится дос-
15
тупным по умолчанию. Теперь, если не указан вышестоящий объект, под ним будет пониматься объект Application.Excel, например, запись
Workbooks.Add
будет равнозначной записи
Application.Workbooks.Add
Для вызова Excel из другого приложения нужно с помощью меню редактора VBA Tools/ References подключить библиотеку Microsoft Excel 11.0 Object Library и создать объект Excel.Application.
Пример создания объекта Application.Excel из приложения Word: Dim M As New Excel.Application
M.Workbooks.Add
M.Visible = True
Объект Application можно объявить в разделе объявлений кода формы с ключевым словом WithEvents, например:
Public WithEvents App As Excel.Application
В этом случае в окне редактора кода для форм, в списке объектов, появится новый объект App со своим набором событийных процедур объекта Application.
Свойства, методы и события объекта Application
Свойство – это неотъемлемая характеристика объекта, его атрибут. Например, объект Окно, отображаемое на экране, имеет свойства, определяющие его ширину и высоту. Свойством является и имя объекта.
Каждый объект имеет множество свойств, изменяя значения которых можно влиять на состояние объекта и его внешний вид. Свойствами обладают не только объекты, но и любые другие типы данных, на-
пример Integer, String и т. д.
Несмотря на то что свойство само является атрибутом объекта, значением его может выступать другой объект, который также имеет свой набор свойств. Объекты, из которых можно получить другие объекты, называются родительскими. Получаемые объекты при этом приобретают статус дочерних объектов.
Статус дочернего объекта может измениться, если через его свойство возвращается родительский объект. В этом случае дочерний объект выступает в роли родительского объекта, а родительский объект – в роли дочернего.
16
Иерархия объектов в объектной модели содержит замкнутые отношения предок–потомок. Например, объект Range (Диапазон ячеек) является дочерним по отношению к объекту Worksheet (Рабочий лист), а объект Рабочий лист, представляющий все ячейки, – дочерним по отношению к объекту Range.
Многие объекты имеют свойства, которые возвращают самый верхний объект в объектной модели. Например, в объектной модели Excel большинство объектов обладают свойством Application, которое возвращает объект Application. В соответствии с этим большинство объектов Excel можно считать родительскими по отношению к объек-
ту Application.
Свойства объектов используются либо для получения их значений, либо для изменения этих значений. Если требуется изменить значение свойства, то сначала указывают имя объекта, которому это свойство принадлежит, а затем через точку – имя свойства и знак равенства с последующим указанием нового значения, например:
ActiveCell.Font.Size = 14
Значениями свойств могут быть не только числа, но и строки символов, например:
ActiveCell.Font.Name = "Courier New Cyr"
Строковые значения заключаются в двойные кавычки.
Значения не всех свойств можно менять. Некоторые значения свойств доступны только для чтения, другие – только для записи. Существуют и свойства, доступные для чтения и записи.
Объект Application, как и многие другие объекты Excel, имеет достаточно большое количество свойств и методов. Некоторые из них являются глобальными параметрами. Их можно использовать без указания имени этого объекта.
Приложению Excel.Application кроме объектов, входящих в объектную модель Excel, могут быть доступны и объекты, являющиеся общими для приложений Office.
Краткая характеристика некоторых свойств
Свойства объекта Application позволяют задавать общие параметры работы приложения Excel. В свойствах, имеющих приставку Active, хранится информация об активном объекте. Активным считается объект, с которым в данный момент взаимодействует пользователь.
17
Значение свойства ActiveCell хранится в свойстве ActiveSheet, а величина свойства ActiveSheet – в свойстве ActiveWorkbook. Пример использования свойства ActiveCell:
With ActiveCell
.Font.Bold = True
.Value = "Отчет о продажах"
End With
Свойство AddIns используется для доступа к надстройкам Мастер подстановок, Пакет анализа, Поиск решения и т. п.
Свойство Cells относится к самым важным свойствам объекта Application и возвращает объект Range, позволяющий обратиться к диапазону ячеек активного листа. Обращение к ячейке A2 активного листа может выглядеть так:
Application.Cells(1,2).Font.Bold = True
В этом примере ячейка на пересечении первой строки и второго столбца будет выделена полужирным шрифтом.
Подобным образом можно использовать и свойства Columns и Rows, например:
Application.Columns(2).Font.Bold = True Application.Rows(2).Font.Bold = True
Cвойства Cells, Columns и Rows возвращают не наборы отдельных объектов Cell, Column и Row, а объект Range.
Для отображения диалоговых окон Excel и определения реакции на действия в них пользователей применяется свойство Dialogs, которое возвращает коллекцию объектов с таким же названием. Частным случаем объекта Dialogs является объект FileDialog, представляющий окно, предназначенное только для работы с файлами.
Свойство Names позволяет вернуть коллекцию Names, представляющую все именованные диапазоны в активной рабочей книге, а метод Add() этой коллекции позволяет определять именованные диапазоны.
Свойство Range возвращает объект Range, который представляет собой диапазон ячеек и используется в Excel практически для любых операций с ячейками.
Свойство ReferenceStyle дает возможность переключить режим отображения ячеек между A1 и R1C1. Во втором случае и строки, и
18
столбцы указываются цифрами. В первом случае цифрами указываются только строки, а столбцы – именами.
Свойства ThisCell и ThisWorkbook позволяют обращаться к текущей ячейке и текущей книге без создания объектных переменных. Текущие объекты специально не создаются, они изначально существуют в работающем Excel.
Свойство WorkSheetFunction позволяет использовать в программе на VBA функции Excel напрямую, без необходимости прописывать их в какую-либо ячейку.
Краткая характеристика некоторых методов
Метод AddCustomList() позволяет создать новый пользовательский список, удалить который можно при помощи метода DeleteCustomList(). В качестве параметра списка выступает либо объект Range, либо стандартный объект Array, например:
Application.AddCustomList Array("1", "2")
Метод ConvertFormula() дает возможность в формулах либо изменить режим отображения адресов A1 или R1C1, либо поменять абсолютные адреса на относительные и наоборот.
DoubleClick() – метод, используемый для перехода в режим ввода данных в ячейку, эквивалентен двойному щелчку мышью по активной ячейке.
Метод Evaluate() позволяет по имени найти объект книги Excel и преобразовать его в объект или значение для дальнейшего использования. То есть метод Evaluate(Name) преобразует имя объекта в сам объект. В качестве имен этот метод принимает имена ячеек в стиле A1, имена диапазонов, имена, определенные в макросе, и ссылки на внешние книги.
Например, ввод данных в ячейки и считывание из них значений можно обеспечить следующей процедурой:
Public Sub S() Evaluate("A1").Value = 2 Evaluate("A2").Formula = "=A1^8" MsgBox Evaluate("A2").Value End Sub
19
Этот метод можно вызвать и неявно – просто заключив имя объекта в квадратные скобки, например:
[A1].Value = 25
В данном случае это будет эквивалентно полной записи:
Evaluate("A1").Value = 25
Чаще применяется запись с квадратными скобками. Метод Evaluate() – самый простой метод обращения к ячейке или диапазону ячеек в книге Excel.
Метод GetOpenFilename() используется для отображения окна открытия файлов и получения имени выбранного файла, например:
Filename = Application.GetOpenFilename()
Для сохранения файлов используется метод GetSaveAsFilename(), который работает с окном Save As.
Кчасто используемым методам относится и метод GoTo(), который
вкачестве параметра принимает объект Range, строку со ссылкой на ячейку в формате R1C1 или имя процедуры VBA. Метод выделяет и активизирует диапазон или ячейку. Если в качестве параметра передается имя процедуры, то метод запускает ее на выполнение.
Метод OnKey() позволяет назначить процедуре VBA определенную клавиатурную комбинацию. Например:
Application.OnKey "%{m}", "Лист1.Msg"
Здесь процедуре Msg() из модуля Лист1 назначена клавиатурная комбинация Alt+M.
Метод RegisterXLL() дает возможность подключить файл надстройки Excel с расширением xll и зарегистрировать его функции и процедуры. Этот метод используется при установке собственного приложения.
Метод Run() позволяет выполнить процедуру либо функцию VBA, макрос Excel или процедуру либо функцию в модуле XLL.
Объект Workbook (Рабочая книга)
Новая рабочая книга может содержать в своем составе объекты, входящие в состав нескольких библиотек. К числу этих библиотек от-
носятся билиотека Excel, Office, VBA.
20
