Модель объектов microsoft excel

Необходимость применения Visual Basic для
приложений в Excel продиктована тем, что
в Excel имеется множество средств. Используя
возможности Excel, например, по работе с
диаграммами, финансовыми функциями и
сводными таблицами, можно создать
сложные приложения. VBA позволяет шить
Excel новыми средствами и упростить его
интерфейс.

Далее рассмотрим:

— Модель объектов Excel

— Работа с основными
объектами Excel

— Создание и использование
форм

Модель объектов Excel

Из всех моделей объектов Microsoft Office модель
объектов Excel является наиболее зрелой.
Excel 5.0 был первым офисным приложением,
в котором VBA использовался как язык
разработки приложений. Модель объектов
Excel совершенствуется в течение нескольких
лет, а теперь она стала более удобной и
полной. По сравнению с Excel 5.0 в Excel 97
добавлено несколько новых объектов.

Если вы работали с предыдущими версиями
Excel, то некоторые объекты будут вам
знакомы. Однако некоторые элементы,
например, объекты WorksheetFunction, VBE и Assistant
являются новыми.

В модели объектов Excel имеются более 100
объектов и семейств. Не следует пугаться
этого. Вероятно окажется, что приблизительно
10 процентов объектов и семейств
достаточно, чтобы выполнить 90 процентов
всех возможных действий. Примерами
наиболее часто используемых объектов
и семейств объекты Application, Workbook и
Workbooks, Worksheet Worksheets, а также объект Range. С
помощью только этих объектов и семейств
можно произвести огромное множество
операций.

Использование объекта Application

Исходным элементом любой модели объектов
Office является объект Application. Он представляет
все приложение в целом. С помощью свойств
и методов элемента Application, можно установить
параметры работы программы, такие как
задаваемые с помощью команды
СервисПараметры (ToolsOptions). В свойствах
объекта Application, например, ActiveWorkbook,
ActiveSheet и ActiveCell хранится информация об
объекте, с которым в текущий момент
работает пользователь. Кроме того,
данный объект имеет полезные методы,
например, метод Application.InputBox, который
удобнее, чем стандартная функция VBA
InputBox().

Использование свойств объекта Application

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

Свойства ActiveWorkbook, ActiveSheet и ActiveCell. В данных
свойствах хранится информация об
активном объекте. Активный объект — это
объект, с которым в текущий момент
взаимодействует пользователь. Значение
свойства ActiveCell хранится в свойстве
ActiveSheet, а величина свойства ActiveSheet — в
свойстве ActiveWorkbook. Приведем пример
использования свойства ActiveCell:

With
ActiveCell

.FontBold
= True

.Value
= «Отчет о продажах»

End
With

Свойство Caption. В свойстве Caption объекта
Application хранится имя, которое появляется
в заголовке окна приложения Excel. Данное
свойство доступно как для чтения, так
и для установки. Если требуется скрыть,
что приложение в действительности
работает в Excel, то можно вместо значения
«Microsoft Excel» указать другую строку:

Application.Caption = «Корпорация АБВ. Продажи»

Чтобы вернуть заголовок «Microsoft Excel»,
укажите ключевое слово Empty:

Application.Caption = Empty

Свойство Cursor. Свойство
Cursor используется для задания внешнего
вида указателя мыши во время выполнения
макроса. При задании значения данного
свойства можно указать одну из четырех
констант Excel:

— Константа XlDefault определяет
использование указателя, заданного по
умолчанию в приложении Excel. *

— Константа xlWait определяет
использование указателя мыши в виде
песочных часов. Рекомендуется присвоить
свойству Cursor это значение в начале
обработки данных (например, извлечения
информации), чтобы сообщить пользователю,
что ему требуется подождать завершения
операции.

— Константа XlNorthwestArrow
используется реже. Она определяет вывод
указателя мыши в виде стрелки основного
режима.

— Константа xlBeam используется
также не очень часто. Она определяет
вывод указателя мыши в виде стрелки
выделения текста.

Необходимо отметить, что после изменения
свойства Cursor необходимо восстановить
исходный вид мыши, присвоив свойству
Cursor значение xlDefault, т. к. это не производится
автоматически по завершении работы

Свойство DisplayAlerts. Если требуется отключить
вывод встроенных подсказок и предупреждений
при выполнении макроса, необходимо
присвоить значение False свойству
DisplayAlerts. В этом случае Excel производит
стандартные действия, выбирая применяемый
по умолчанию ответ на сообщения. Исходное
значение свойства DisplayAlerts равно True.

Если макрос изменяет значение свойства
DisplayAlerts, то перед окончанием его работы
требуется присвоить данному свойству
значение Тrue. В предыдущих версиях Excel
это производилось автоматически, а в
нас щей- необходимо делать вручную.
Таким образом, чтобы использовать
макросы предыдущих версий Excel в Excel 97,
требуется во избежание нежелательного
поведения приложения добавить в программу
следующую строку кода:

Application.DisplayAlerts = True

Свойства DisplayFormulaBar,
DisplayScrollBars и DisplayStatus:

Чтобы скрыть строку формулы, полосы
прокрутки или строку состояния, требуется
присвоить значение False свойству
DisplayFormulaBar, DisplayScrollBars или DisplayStatusBar
соответственно. И наоборот, для вывода
требуемого элемента интерфейса,
необходимо присвоить True соответствующему
свойству. Значение по умолчанию для
данных свойств равно True.

Свойство ЕпаblеСаnсelКеу. Обычно прерывание
выполнения макроса осуществляется с
помощью комбинации клавиш +. По умолчанию
свойство EnableCancelKey равно значению
xlInterrupt, которое допускает остановку
процедуры пользователем для ее отладки
или завершения. Если же требуется
запретить прерывание выполнения,
присвойте значение xlDisabled или xlErrorHandler
свойству EnableCancelKey. Hеобходимо отметить,
что константу xlDisabled следует использовать
с особой осторожностью. Если свойство
EnableCancelKey имеет данное значение, то выход
из бесконечного цикла или прерывание
макроса невозможно. Таким образом, перед
установкой свойства требуется убедиться,
что процедура полностью и тщательно
отлажена.

Вместо константы xlDisable можно указать
константу xlErrorHandler. Если свойство
EnableCancelKey равно данному значению, то в
выполняемой процедуре осуществляется
переход к процедуре обработки ошибки.
При использовании константы xlErrorHandler
необходимо включить в макрос подпрограмму
обработки ошибки, указав инструкцию On
Error Goto. Номер ошибки, возникающей в
результате нажатия комбинации клавиш
<Ctrl>+<Break>, равен 18.

По завершении работы макроса свойству
EnableCancelKey автоматически присваивается
значение xlInterrupt.

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

В предыдущих версиях Excel свойству
ScreenUpdating автоматически присваивалось
значение True, а в настоящей версии это
необходимо делать вручную. Таким образом,
чтобы использовать макросы предыдущих
версий в Excel 97, требуется добавить в
конец макроса инструкцию, которая
восстанавливает значение свойства
ScreenUpdating.

Свойство StatusBar. Свойство statusBar позволяет
задать текст строки состояния.
Рекомендуется применять данное свойство
совместно со свойством Cursor:

‘Присвоить значение True свойству
DisplayStatusBar, чтобы вывести строку состояния.

Application.
DisplayStatusBar = True

‘Установка
текста строки состояния.

Application.StatusBar
= «Обработка, пожалуйста, подождите…
«

‘Замена
обычного указателя мыши на песочные
часы.

Application.Cursor
= xlWait

‘Вызов
процедуры

GetSalesData

‘Восстановление
указателя мыши и строки состояния

Application.Cursor
= xlDefault

Application.StatusBar
= False

Свойтсво ThisWorkBook. В этом свойстве хранится
ссылка на объект Workbook, являющийся рабочей
книгой, в которой содержится выполняемый
макрос. Значение этого свойства и
свойства ActiveWorkBook не обязательно
совпадают. Если в Excel открыто несколько
рабочих книг, то возможно, что в свойстве
ActiveWorkBook содерится ссылка на одну рабочую
книгу, а в свойстве ThisWorkBook — на другую,
которая и содержит выполняющийся макрос.

Использование методов объекта
Application

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

Метод Calculate. Если в Excel установлен режим
вычислений вручную, можно использовать
метод Calculate объекта Application для
принудительного выполнения вычислений
во всех открытых рабочих книгах. Метод
имеет следующий синтаксис:

Application.Calculate

Метод Goto. Метод Goto позволяет выбрать
требуемый диапазон или процедуру VBA в
любой рабочей книге. Отличие данного
метода от рассматриваемого ниже метода
Select заключается в том, что метод Goto
активизирует связанную с диапазоном
или процедурой рабочую книгу, если она
не активна. Метод имеет следующий
синтаксис:

Application.Goto Reference, Scroll

Параметр Reference — необязательный аргумент,
который используется для указания
требуемого диапазона в формате R1C1 или
для задания имени процедуры VBA. Если
данный параметр опущен, то подставляется
последний диапазон, который указывался
в методе Goto.

Параметp Scroll также не обязателен. Если
он равен True, то после выполнения метода
левый верхний угол заданного в методе
диапазона выводится в левом верхнем
углу окна.

Метод InputBox. Функция inputBox() рассмотрена
выше. Метод ох хотя и кажется похожим,
на самом деле имеет большие отличия.
Функция InputBox() возвращает только строку.
Метод InputBox имеет необязательный параметр
type, который позволяет задать тип введенных
пользователем данных. Метод
имеет следующий
синтаксис:

Application.InputBox(prompt, title, default, left, top, _
helpFile,helpContextID, type)

Параметр prompt — обязательный аргумент,
определяющий сообщение, которое требуется
отобразить в окне ввода. Параметр title —
дополнительный аргумент, который задает
заголовок окна. По умолчанию выводится
заголовок «Ввод» (Input). Другим
необязательным параметром является
аргумент default. Он определяет значение
по умолчанию, которое нужно вывести в
окне. Параметры left и top — дополнительные
параметры, которые определяют положение
окна ввода по горизонтали и по вертикали
относительно левого верхнего угла
экрана. Параметры helpFile и helpContextID — имена
файла справки и контекстного идентификатора
в этом файле. Аргумент type определяет
тип данных, возвращаемый методом. Если
аргумент type не задан, то возвращается
текст. В качестве значения данного
apгумента можно использовать значения,
перечисленные в таблице:

Значение

Тип

0

Формула

1

Номер

2

Текст
(строка)

4

Логическое
значение (True или False)

8

Ссылка на
ячейки, например, на объект Range

16

Значение
ошибки, например, #Н/А

64

Массив

Значения параметра type не являются
последовательными, поскольку в программе
можно использовать их комбинацию.
Например, если необходимо задать ввод
либо текста, либо чисел, следует присвоить
данному параметру значение 1 + 2.

При нажатии кнопки ОК метод InputBox
возвращает значение, введенное в окно,
при нажатии кнопки Отмена (Cancel) — значение
False. Приведем пример использования
метода InputBox, в котором показано, как
данный макрос реагирует на ввод текста
или на нажатие кнопки Отмена:

Sub
Input_example()

Dim
hourly_wage As Currency

Dim
num_of_hours As Single

Dim
error_text As String

‘Параметр
Type получает
значение
1 (число).

hourly_wage
= Application.InputBox(«Введите
ставку
почасовой_

оплаты:»,
«Почасовая _ оплата», 3.75, 1)

‘Обратите
внимание на использование значения
False.

If
hourly_wage = False Then

MsgBox
«Операция
отменена.»

End

End
If

num_of_hours
= Application.InputBox(«Введите
количество_

отработанных
часов:», _ «Отработанные часы»,
40, 1)

If
num_of_hours = False Then

MsgBox
«Операция отменена.»

End
sub

Else

MsgBox
«К
оплате
» & Format((num_of_hours *_ hourly_wage), «$##,##0.00»)

End
If

End
Sub

Предупреждение

При проверке нажатия кнопки Отмена
следует сравнить возвращаемый методом
InputBox результат со значением False, а не со
строкой «False».

Методы OnKey, OnRepeat, OnTime и
OnUndo. В предыдущих версиях не
поддерживались события. Чтобы устранить
это ограничение, в объект Application были
добавлены методы OnKey, OnRepeat, OnTime и OnUndo.
Они обычно используются в процедуре
Auto_Open, которая автоматически выполняется
при открытии рабочей книги.

Метод OnKey выполняет заданную процедуру
при нажатии определенной клавиши или
комбинации клавиш. Метод имеет следующий
синтаксис:

Application.OnKey Key, Procedure

Параметр Key — обязательный строковый
аргумент, который определяет комбинацию
клавиш или клавишу, которая назначена
процедуре. В параметре Key можно указать
также специальные клавиши:

Код клавиш для метода OnKey.

Клавиша

Код

<Backspace>

{BACKSPACE} или
{BS}

<Break>

{BREAK}

<Caps Lock>

{CAPSLOCK}

<Clear>

{CLEAR}

<Delete>

{DELETE} или
{DEL}

<End>

{END}

<Enter>
(цифровая клавиатура)

{ENTER}

<Enter>

~

<Escape>

{ESCAPE} или
{ESC}

<F1>-<F15>

{F1}-{F15}

<Home>

{HOME}

<lnsert>

{INSERT}

< <->

{LEFT}

<Num Lock>

{NUMLOCK}

<Page Down>

{PGDN}

<Page Up>

{PGUP}

< -> >

{RIGHT}

<Scroll Lock>

{SCROLLLOCK}

<Tab>

{TAB}

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

Коды специальных клавиш для метода
OnKey

Специальная
клавиша

Код

Alt или Option

%

Shift

+

Ctrl

^

Параметр Procedure — необязательный строковый
аргумент, который определяет имя
процедуры, запускаемой при нажатии
клавиши или комбинации клавиш. Если
требуется отключить исполнение макроса
при нажатии комбинации, присвойте
данному параметру пустую строку («»).
Если требуется восстановить исходную
функцию сочетания клавиш, выполните
OnKey, не указывая параметр Procedure. Приведем
пример использования ОпКеу:

Назначение комбинации клавиш <Ctrl>+<
> процедуре GetSalesData.

Application.OnKey «^{RIGHT}», «GetSalesData»

‘Отмена назначения комбинации клавиш
<Ctrl>+< >.

Application.ОпКеу «^{RIGHT}», «»

‘Восстановление функции комбинации
клавиш <Ctrl>+< >.

Application.OnKey «^{RIGHT}»

Метод OnRepeat определяет процедуру, которая
выполняется при выборе команды
ПравкаПовторить (EditRepeat). Метод имеет
следующий синтаксис:

Application.OnRepeat Text, Procedure

Параметр Text — обязательный аргумент,
задающий текст команды ПравкаПовторить.
Параметр Procedure — обязательный аргумент,
содержащий имя процедуры, которая
выполняется при выборе команды
ПравкаПовторить.

Приведем пример использования данного
метода. Следующая инструкция устанавливает
текст команды ПравкаПовторить равным
«Повторить чтение данных по сбыту»
и связывает процедуру GetSalesData с данной
командой:

Application.OnRepeat «Повторить чтение данных
по сбыту», «SaleData.xls!GetSalesData»

Метод OnTime позволяет назначить выполнение
процедуры на заданное время. Метод
имеет следующий
синтаксис:

Application.OnTime (EarliestTime, Procedure, LatestTime, Schedule)

Обязательный параметр EarliestTime — момент
запуска процедуры. Параметр Procedure также
обязателен. Он содержит имя выполняемой
процедуры. Следует отметить, что для
ввода значения параметра EarliestTime можно
использовать функцию TimeValue().

Если на момент, заданный параметром
EarliestTime, Excel не может запустить указанную
процедуру из-за того, что выполняет
другую операцию, то дополнительный
параметр LatestTime определяет последний
момент запуска этой процедуры. Если по
прошествии указанного времени Excel так
и не освободился, то процедура не
исполняется.

Параметр Schedule — необязательный аргумент.
Если он равен значению True (по умолчанию),
то выполнение процедуры откладывается
на сутки. Приведем пример использования
метода OnTime:

‘Выполнение процедуры GetSalesData по прошествии
1 минуты с текущего момента.

Application.OnTime Now + TimeValue («00:01:00»),
«GetSalesData»

‘Выполнение
процедуры UpdateSalesData в
14:00.

Application.OnTime TimeValue(» 14:00:00 «),
«UpdateSalesData»

Метод OnUndo позволяет установить текст
команды ПравкаОтменить (EditUndo) и связать
с этой командой процедуру. Синтаксис
метода напоминает синтаксис метода
OnRepeat:

Application.OnUndo(Text, Procedure)

Параметр Text устанавливает текст команды
Правкатменить. Аргумент Procedure определяет
процедуру, связанную с этой командой.

Метод Quit. Чтобы выйти из Excel, не запуская
макросы Auto_Close, используется метод Quit
объекта Application. При выходе выводится
запрос на запись не сохраненных открытых
рабочих книг. Метод имеет следующий
синтаксис:

Application.Quit

Примечание.

Если требуется выйти из Excel, не отображая
запрос на сохранение открытых рабочих
книг, присвойте значение False свойству
Application.DisplayAlerts. Однако при этом следует
быть крайне осторожным. Не забудьте,
что без сохранения закрываются все
открытые рабочие книги, и не только
открытые вашим приложением.

Использование событий объекта Application

В предыдущих версиях VBA у каждого объекта
поддерживалось только одно событие, в
большинстве случаев — событие Click. В VBA
5.0 объекты, включая элемент Application, имеют
множество событий. Чтобы обработать
событие с помощью объекта Application,
необходимо создать новый модуль класса
и объявить в нем переменную, используя
ключевое слово WithEvents:

Public WithEvents oApp As Application

Ключевое слово WithEvents определяет, что
переменная oApp используется для обработки
события объекта. Данное ключевое слово
допускается только в модулях класса и
описывает только переменные уровня
модуля. Теперь требуется связать
описанный в модуле класса объект с
элементом Application. Это можно сделать в
любом модуле, указав следующий код:

‘Инструкция Dim располагается в разделе
описаний модуля.

‘Имя EventClassModule — имя модуля класса.

Dim X As New EventClassModule

Sub InitializeAppEvents()

Set X.oApp = Application

End Sub

После выполнения процедуры
initializeAppEvents объект оАрр в модуле пасса
указывает на объект Excel Application, что
позволяет использовать процедуры
обработки в модуле класса при возникновении
событий. Если необходимо включить или
отключить обработку событий, в программе
следует изменить значение свойства
Application.EnableEvents. Если данное свойство
имеет значение True, то процедуры обработки
доступны.

Ниже описываются некоторые события
объекта Application. Следует отметить, что
именем объекта для события object_ИмяСобытия
(например, object_NewWorkbook) — является имя
переменной, которая описана с помощью
ключевого слова WithEvents.

Private Sub object_NewWorkbook(ByVal Wb As Workbook)

Параметр Wb — ссылка на рабочую книгу,
создание которой вызвало событие.

Событие WorkbookActivate. Событие WorkbookActivate
возникает при активизации любой рабочей
книги. Процедура обработки события
имеет следующий синтаксис:

Private Sub object_WorkbookActivate (ByVal Wb As Workbook)

Параметр Wb — ссылка на рабочую книгу,
активизация которой вызвало событие.
Например, если требуется вручную
произвести вычисления для всех открытых
рабочих книг, то при активизации книги
можно использовать следующую процедуру:

Private Sub oApp_WorkbookActivate(ByVal Wb As Workbook)

Application. Calculate

End Sub

Событие WorkbookBeforeClose. Событие
WorkbookBeforeClose возникает непосредственно
перед закрытием открытой рабочей книги.
Синтаксис процедуры обработки является
следующим:

Private Sub object_WorkbookBeforeClose(ByVal Wb As Workbook, _ ByVal
Cancel As Boolean)

Параметр Wb — ссылка на рабочую книгу,
которую требуется закрыть. Параметр
Cancel имеет значение False при возникновении
события. Если процедура обработки
события присваивает значение True данному
параметру, то рабочая книга не закрывается
по завершении выполнения процедуры.
Данное событие используется, например,
для выполнения метода Calculate или для
исполнения подпрограммы проверки
условий на значение:

Private Sub oApp_WorkbookBeforeClose(ByVal Wb As Workbook, ByVal
Cancel As Boolean) Application.Calculate

‘Вызов внешней подпрограммы проверки
условий на значение

ValidateEntries

End Sub

Событие WorkbookBeforePrint. Событие
WorkbookBeforePrint возникает непосредственно
перед печатью открытой рабочей книги.
Синтаксис процедуры обработки является
следующим:

Private Sub object_WorkbookBeforePrint(ByVal Wb As Workbook, _ ByVal
Cancel As Boolean)

Параметр Wb — ссылка на рабочую книгу,
которую требуется напечатать. Параметр
Cancel имеет значение False при возникновении
события. Если требуется отменить печать
документа, присвойте данному параметру
в процедуре обработки значение True.

Событие WorkbookBeforeSave. Событие WorkbookBeforeSave
возникает непосредственно перед
сохранением открытой рабочей книги.
Синтаксис процедуры обработки является
следующим:

Private Sub object_WorkbookBeforeSave{ByVal Wb As Workbook, _

ByVal SaveAsUi As Boolean, ByVal Cancel As Boolean)

Параметр Wb — ссылка на сохраняемую
рабочую книгу. Если требуется отобразить
диалоговое окно Сохранение документа
(Save As), присвойте параметру SaveAsUi значение
True. Параметр Cancel имеет значение False при
возникновении события. Если требуется
отменить сохранение документа, присвойте
данному параметру значение True.

Событие WorkbookDeactivate. Событие WorkbookDeactivate
возникает, когда открытая рабочая книга
теряет фокус. Синтаксис процедуры
обработки является следующим:

Private Sub object_WorkbookDeactivate (ByVal Wb As Workbook)

Параметр wb — ссылка на рабочую книгу,
которая теряет фокус.

Событие WorkbookNewSheet. Событие WorkbookNewSheet
возникает при добавлении нового листа
в открытую рабочую книгу. Синтаксис
процедуры обработки
таков:

Private Sub object_WorkbookNewSheet(ByVal Wb As Workbook, _ ByVal Sh
As Object)

Параметр wb — ссылка на рабочую книгу, в
которую добавлен лист. Аргумент Sh — вновь
созданный лист.

Данное событие можно использовать,
чтобы удалить вновь созданный рабочий
лист, если количество листов в рабочей
книге больше заданного:

Private Sub object_WorkbookNewSheet (ByVal Wb As Workbook, _ ByVal Sh
As Object)

If Wb.Worksheets.Count > 6 Then

MsgBox «Максимальное число листов в
рабочей книге равно 5.»

Wb.Sh.Delete

End If

End Sub

Событие WorkbookOpen. Событие WorkbookOpen возникает
при открытии рабочей книги. Синтаксис
процедуры обработки является следующим:

Private Sub object__WorkbookOpen (ByVal Wb As Workbook)

Параметр Wb — ссылка на открываемую
рабочую книгу.

Аннотация: Лекция посвящена описанию объектной модели MS Excel и подробному описанию методов, свойств и событий Application.

13.1. Особенности программирования для MS Excel

Microsoft Office Excel — это популярные электронные таблицы. Обычно, программируя для этой программы, преследуют такие цели:

  • Автоматизация вычислений.
  • Автоматизация ввода и обработки информации.
  • Работа с базами данных — вывод, ввод, анализ, визуализация информации.
  • Анализ финансовой и другой информации.
  • Создание систем для организации автоматизированного ввода данных
  • Математическое моделирование.

В общем виде программирование в Excel похоже на работу с Microsoft Word. Однако одно из главных отличий заключается в том, что в Excel рабочая область листа разбита на ячейки, каждая из которых имеет собственное имя. Имена ячеек могут быть двух видов.

  • Первый вид (стиль A1) — это имя, состоящее из буквенного имени столбца и номера строки. Например, A1 — ячейка, находящаяся на пересечении столбца А (первого) и первой строки.
  • Другой вид — это индексы ячеек (стиль именования R1C1 ). Для адресации ячейки в таком стиле указывают номер строки (R — Row — строка) и номер столбца (C — Column — столбец), на пересечении которых расположена ячейка. Строки изначально пронумерованы, а номера столбцов начинаются с 1 — первому столбцу соответствует столбец A, второму — В и т.д. Например, (2, 3) — это адрес ячейки, находящийся на пересечении второй строки и третьего столбца, то есть, если переложить это на стиль A1 — получим ячейку С2 (рис. 13.1.)

Ячейка C2 на листе MS Excel

Рис.
13.1.
Ячейка C2 на листе MS Excel

Для выполнения большинства операций в MS Excel применяются следующие объекты.

  • Excel.Application (Приложение) — объект, представляющий приложение Microsoft Excel, аналогичен Word.Application.
  • Workbook (Рабочая книга) — представляет рабочую книгу — аналог документа Microsoft Word. Однако, в Word мы работаем с данными, расположенными в документе, а в Excel на пути к данным есть еще один объект — рабочий лист.
  • Worksheet (Рабочий лист) — книга в MS Excel разбита на рабочие листы. Именно на листе расположены ячейки, которые могут хранить информацию и формулы.
  • Range (Диапазон) — может быть представлен в виде одной ячейки или группы ячеек. Этот объект заменяет множество объектов для работы с элементами документов ( character, word и т.д.), которые применяются в Microsoft Word. В результате работа с листом становится очень четкой и удобной — чтобы работать с какой-либо ячейкой, надо знать лишь ее имя (в формате A1) или адрес ( R1C1 ).
  • QueryTable (Таблица запросов) — этот объект используют для импорта в Microsoft Excel информации из баз данных. Подключение к базе данных, запрос информации и т.д. производятся средствами объекта, а итоги запроса выгружаются на лист MS Excel в виде обычной таблицы.
  • PivotTable (Сводная таблица) — это особый вид электронной таблицы Excel — она позволяет в интерактивном режиме обобщать и анализировать большие объемы информации, в частности, взятой из базы данных.
  • Chart (Диаграмма) — представляет собой диаграмму. Обычно их используют для визуализации данных.

Давайте начнем рассмотрение объектной модели MS Excel с объекта Application.

13.2. Объект Application

13-01-Excel Application.xlsm — пример к п. 13.2.

Принципы работы с объектом Application в MS Excel очень похожи на таковые в MS Word.

Рассмотрим пример. Откроем MS Excel, добавим на рабочий лист кнопку, добавим в обработчик щелчка по кнопке такой код (листинг 13.1.).

MsgBox Excel.Application.Name


Листинг
13.1.
Вывести имя приложения

После выполнения программы в окне сообщения отобразится имя приложения — в данном случае — Microsoft Excel. Очевидно, что свойство Name объекта Application возвращает имя приложения.

Теперь рассмотрим наиболее важные методы и свойства Application. Некоторые из них похожи на таковые в MS Word. Например, метод Quit точно так же, как в Word, закрывает приложение, свойство Visible отвечает за видимость окна программы и т.д.

13.3. Методы Application

13.3.1. Calculate — принудительный пересчет

Этот метод, вызываемый для объекта Application, позволяет пересчитать все открытия книги. Его же можно вызывать для отдельных книг (объект Workbook ) листов ( Worksheet ), ячеек и их диапазонов ( Range ). Например, код из листинга 13.2. позволяет пересчитать все открытые книги.

Application.Calculate


Листинг
13.2.
Пересчитать все открытые книги

13.3.2. GoTo — переход в ячейку

13-02-Excel GoTo.xlsm — пример к п. 13.3.2.

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

Полный вызов метода выглядит так:

Goto(Reference, Scroll)

В качестве параметра Reference используется ссылка на ячейку или диапазон ячеек, которые должны быть выделены после вызова метода. Так же здесь может быть использовано имя макроса — тогда он будет запущен.

Параметр Scroll отвечает за «перемотку» листа Excel к выделенным ячейкам — так, чтобы левый верхний угол выделения совпадал бы с левым верхним углом отображаемой области листа. Если Scroll установлен в True — лист перематывается, если в False — нет.

Например, такой вызов (листинг 13.3.) позволяет выделить ячейку H500 на активном листе.

Application.Goto _
    Reference:=ActiveSheet.Range("H500"), _
    Scroll:=True


Листинг
13.3.
Выделить ячейку H500

Как видите, обращение к активному листу очень напоминает обращение к активному документу в MS Word. Обратите внимание на то, что мы используем полное обращение к методу — Application.GoTo — как вы знаете, обычно свойства и методы объекта Application можно использовать в коде, не указывая этого объекта. Однако, если в этом случае не указать Application, то вместо метода GoTo программа попытается выполнить оператор безусловного перехода GoTo.

13.3.3. SendKeys — имитация нажатий на клавиши клавиатуры

13-03-Excel SendKeys.xlsm — пример к п. 13.3.3.

Очень интересный метод — позволяет передавать в активное окно приложения нажатия клавиш. Полный вызов метода выглядит так:

SendKeys(Keys, Wait)

Параметр Keys позволяет задавать клавиши, нажатия которых будут переданы приложению. Метод поддерживает эмуляцию как алфавитно-цифровых, так и управляющих клавиш, для которых применяется специальная кодировка. Алфавитно-цифровые клавиши указываются при вызове в своем обычном виде Например, для передачи символа «Ф» нужно указать его при вызове метода и т.д.

Чтобы передать приложению нажатия клавиши Backspace — используйте код {BS}. Для передачи нажатия кнопки Enter используйте значок ~ (тильда), для клавиши Del — код {DEL}.

Для передачи приложению нажатий клавиш Shift, Ctrl или Alt, можно воспользоваться следующими кодами этих клавиш:

  • SHIFT+ (знак плюс)
  • CTRL — ^ (крышка)
  • ALT % (знак процента)

Параметр Wait может принимать значения True или False. Если он будет установлен в True — макрос подождет, пока приложение обработает введенные с «клавитуры» данные, после чего продолжит выполнение. Если в False — макрос ждать не будет.

Рассмотрим пример. С помощью метода SendKeys введем в ячейку A1 текст «Сейчас закрою программу!», после чего попытаемся закрыть программу, «нажав» сначала Alt, потом Ф (для открытия главного меню Office), и потом — Ы — для выхода из программы. Подразумевается, что при запуске макроса (листинг 13.4.) указанная ячейка активна — в ней находится рамка выделения.

Application.SendKeys ("Сейчас закрою программу!")
    Application.SendKeys ("%ФЫ")


Листинг
13.4.
Имитация нажатий клавиш клавиатуры

После выполнения этого кода вы увидите окно со стандартным вопросом о сохранении документа.

13.3.4. Wait — пауза при выполнении макроса

13-04-Excel Wait.xlsm — пример к п. 13.3.4.

Позволяет сделать паузу в выполнении макроса. Пауза может быть нужна для того, чтобы пользователь успел что-то рассмотреть или для того, чтобы на время освободить вычислительные ресурсы системы.

При вызове этого метода указывается время, на которое должно быть приостановлено выполнение макроса. После того, как истекает время, заданное при вызове метода, он возвращает True и выполнение программы продолжается. Например, в листинге 13.5. так можно остановить выполнение прораммы на 7 секуд, после чего — вывести сообщение.

If Application.Wait(Now + TimeValue("0:00:7")) Then
    MsgBox "Семь секунд прошло!"
End If


Листинг
13.5.
Приостановка выполнения программы

Здесь мы получаем значение типа Date с помощью функции TimeValue. После того, как пройдут 7 секунд, выполнение макроса возобновится, метод возвратит True, будет выполнено условие и выведено сообщение.

Термин Объекты Excel (понимаемый в широком смысле, как объектная модель Excel) включает в себя элементы, из которых состоит любая рабочая книга Excel. Это, например, рабочие листы (Worksheets), строки (Rows), столбцы (Columns), диапазоны ячеек (Ranges) и сама рабочая книга Excel (Workbook) в том числе. Каждый объект Excel имеет набор свойств, которые являются его неотъемлемой частью.

Например, объект Worksheet (рабочий лист) имеет свойства Name (имя), Protection (защита), Visible (видимость), Scroll Area (область прокрутки) и так далее. Таким образом, если в процессе выполнения макроса требуется скрыть рабочий лист, то достаточно изменить свойство Visible этого листа.

В Excel VBA существует особый тип объектов – коллекция. Как можно догадаться из названия, коллекция ссылается на группу (или коллекцию) объектов Excel. Например, коллекция Rows – это объект, содержащий все строки рабочего листа.

Доступ ко всем основным объектам Excel может быть осуществлён (прямо или косвенно) через объект Workbooks, который является коллекцией всех открытых в данный момент рабочих книг. Каждая рабочая книга содержит объект Sheets – коллекция, которая включает в себя все рабочие листы и листы с диаграммами рабочей книги. Каждый объект Worksheet состоит из коллекции Rows – в неё входят все строки рабочего листа, и коллекции Columns – все столбцы рабочего листа, и так далее.

В следующей таблице перечислены некоторые наиболее часто используемые объекты Excel. Полный перечень объектов Excel VBA можно найти на сайте Microsoft Office Developer (на английском).

Объект Описание
Application Приложение Excel.
Workbooks Коллекция всех открытых в данный момент рабочих книг в текущем приложении Excel. Доступ к какой-то конкретной рабочей книге может быть осуществлён через объект Workbooks при помощи числового индекса рабочей книги или её имени, например, Workbooks(1) или Workbooks(«Книга1»).
Workbook Объект Workbook – это рабочая книга. Доступ к ней может быть выполнен через коллекцию Workbooks при помощи числового индекса или имени рабочей книги (см. выше). Для доступа к активной в данный момент рабочей книге можно использовать ActiveWorkbook.

Из объекта Workbook можно получить доступ к объекту Sheets, который является коллекцией всех листов рабочей книги (рабочие листы и диаграммы), а также к объекту Worksheets, который представляет из себя коллекцию всех рабочих листов книги Excel.

Sheets Объект Sheets– это коллекция всех листов рабочей книги. Это могут быть как рабочие листы, так и диаграммы на отдельном листе. Доступ к отдельному листу из коллекции Sheets можно получить при помощи числового индекса листа или его имени, например, Sheets(1) или Sheets(«Лист1»).
Worksheets Объект Worksheets – это коллекция всех рабочих листов в рабочей книге (то есть, все листы, кроме диаграмм на отдельном листе). Доступ к отдельному рабочему листу из коллекции Worksheets можно получить при помощи числового индекса рабочего листа или его имени, например, Worksheets(1) или Worksheets(«Лист1»).
Worksheet Объект Worksheet – это отдельный рабочий лист книги Excel. Доступ к нему можно получить при помощи числового индекса рабочего листа или его имени (см. выше).

Кроме этого Вы можете использовать ActiveSheet для доступа к активному в данный момент рабочему листу. Из объекта Worksheet можно получить доступ к объектам Rows и Columns, которые являются коллекцией объектов Range, ссылающихся на строки и столбцы рабочего листа. А также можно получить доступ к отдельной ячейке или к любому диапазону смежных ячеек на рабочем листе.

Rows Объект Rows – это коллекция всех строк рабочего листа. Объект Range, состоящий из отдельной строки рабочего листа, может быть доступен по номеру этой строки, например, Rows(1).
Columns Объект Columns – это коллекция всех столбцов рабочего листа. Объект Range, состоящий из отдельного столбца рабочего листа, может быть доступен по номеру этого столбца, например, Columns(1).
Range Объект Range – это любое количество смежных ячеек на рабочем листе. Это может быть одна ячейка или все ячейки листа.

Доступ к диапазону, состоящему из единственной ячейки, может быть осуществлён через объект Worksheet при помощи свойства Cells, например, Worksheet.Cells(1,1).

По-другому ссылку на диапазон можно записать, указав адреса начальной и конечной ячеек. Их можно записать через двоеточие или через запятую. Например, Worksheet.Range(«A1:B10») или Worksheet.Range(«A1», «B10») или Worksheet.Range(Cells(1,1), Cells(10,2)).

Обратите внимание, если в адресе Range вторая ячейка не указана (например, Worksheet.Range(«A1») или Worksheet.Range(Cells(1,1)), то будет выбран диапазон, состоящий из единственной ячейки.

Приведённая выше таблица показывает, как выполняется доступ к объектам Excel через родительские объекты. Например, ссылку на диапазон ячеек можно записать вот так:

Workbooks("Книга1").Worksheets("Лист1").Range("A1:B10")

Содержание

  1. Присваивание объекта переменной
  2. Активный объект
  3. Смена активного объекта
  4. Свойства объектов
  5. Методы объектов
  6. Рассмотрим несколько примеров
  7. Пример 1
  8. Пример 2
  9. Пример 3

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

В Excel VBA объект может быть присвоен переменной при помощи ключевого слова Set:

Dim DataWb As Workbook
Set DataWb = Workbooks("Книга1.xlsx")

Активный объект

В любой момент времени в Excel есть активный объект Workbook – это рабочая книга, открытая в этот момент. Точно так же существует активный объект Worksheet, активный объект Range и так далее.

Сослаться на активный объект Workbook или Sheet в коде VBA можно как на ActiveWorkbook или ActiveSheet, а на активный объект Range – как на Selection.

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

Таким образом, чтобы сослаться на диапазон A1:B10 на активном рабочем листе активной книги, можно записать просто:

Смена активного объекта

Если в процессе выполнения программы требуется сделать активной другую рабочую книгу, другой рабочий лист, диапазон и так далее, то для этого нужно использовать методы Activate или Select вот таким образом:

Sub ActivateAndSelect()

   Workbooks("Книга2").Activate
   Worksheets("Лист2").Select
   Worksheets("Лист2").Range("A1:B10").Select
   Worksheets("Лист2").Range("A5").Activate

End Sub

Методы объектов, в том числе использованные только что методы Activate или Select, далее будут рассмотрены более подробно.

Свойства объектов

Каждый объект VBA имеет заданные для него свойства. Например, объект Workbook имеет свойства Name (имя), RevisionNumber (количество сохранений), Sheets (листы) и множество других. Чтобы получить доступ к свойствам объекта, нужно записать имя объекта, затем точку и далее имя свойства. Например, имя активной рабочей книги может быть доступно вот так: ActiveWorkbook.Name. Таким образом, чтобы присвоить переменной wbName имя активной рабочей книги, можно использовать вот такой код:

Dim wbName As String
wbName = ActiveWorkbook.Name

Ранее мы показали, как объект Workbook может быть использован для доступа к объекту Worksheet при помощи такой команды:

Workbooks("Книга1").Worksheets("Лист1")

Это возможно потому, что коллекция Worksheets является свойством объекта Workbook.

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

ActiveSheet.Name = "Мой рабочий лист"

Методы объектов

Объекты VBA имеют методы для выполнения определённых действий. Методы объекта – это процедуры, привязанные к объектам определённого типа. Например, объект Workbook имеет методы Activate, Close, Save и ещё множество других.

Для того, чтобы вызвать метод объекта, нужно записать имя объекта, точку и имя метода. Например, чтобы сохранить активную рабочую книгу, можно использовать вот такую строку кода:

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

Чтобы передать методу аргументы, необходимо записать после вызова метода значения этих аргументов через запятую. Например, если нужно сохранить активную рабочую книгу как файл .csv с именем «Книга2», то нужно вызвать метод SaveAs объекта Workbook и передать аргументу Filename значение Книга2, а аргументу FileFormat – значение xlCSV:

ActiveWorkbook.SaveAs "Книга2", xlCSV

Чтобы сделать код более читаемым, при вызове метода можно использовать именованные аргументы. В этом случае сначала записывают имя аргумента, затем оператор присваивания «:=» и после него указывают значение. Таким образом, приведённый выше пример вызова метода SaveAs объекта Workbook можно записать по-другому:

ActiveWorkbook.SaveAs Filename:="Книга2", [FileFormat]:=xlCSV

В окне Object Browser редактора Visual Basic показан список всех доступных объектов, их свойств и методов. Чтобы открыть этот список, запустите редактор Visual Basic и нажмите F2.

Рассмотрим несколько примеров

Пример 1

Этот отрывок кода VBA может служить иллюстрацией использования цикла For Each. В данном случае мы обратимся к нему, чтобы продемонстрировать ссылки на объект Worksheets (который по умолчанию берётся из активной рабочей книги) и ссылки на каждый объект Worksheet отдельно. Обратите внимание, что для вывода на экран имени каждого рабочего листа использовано свойство Name объекта Worksheet.

'Пролистываем поочерёдно все рабочие листы активной рабочей книги
'и выводим окно сообщения с именем каждого рабочего листа

Dim wSheet As Worksheet

For Each wSheet in Worksheets
   MsgBox "Найден рабочий лист: " & wSheet.Name
Next wSheet

Пример 2

В этом примере кода VBA показано, как можно получать доступ к рабочим листам и диапазонам ячеек из других рабочих книг. Кроме этого, Вы убедитесь, что если не указана ссылка на какой-то определённый объект, то по умолчанию используются активные объекты Excel. Данный пример демонстрирует использование ключевого слова Set для присваивания объекта переменной.

В коде, приведённом ниже, для объекта Range вызывается метод PasteSpecial. Этот метод передаёт аргументу Paste значение xlPasteValues.

'Копируем диапазон ячеек из листа "Лист1" другой рабочей книги (с именем Data.xlsx)
'и вставляем только значения на лист "Результаты" текущей рабочей книги (с именем CurrWb.xlsm)

Dim dataWb As Workbook

Set dataWb = Workbooks.Open("C:Data")

'Обратите внимание, что DataWb – это активная рабочая книга.
'Следовательно, следующее действие выполняется с объектом Sheets в DataWb.

Sheets("Лист1").Range("A1:B10").Copy

'Вставляем значения, скопированные из диапазона ячеек, на рабочий лист "Результаты"
'текущей рабочей книги. Обратите внимание, что рабочая книга CurrWb.xlsm не является
'активной, поэтому должна быть указана в ссылке.

Workbooks("CurrWb").Sheets("Результаты").Range("A1").PasteSpecial Paste:=xlPasteValues

Пример 3

Следующий отрывок кода VBA показывает пример объекта (коллекции) Columns и демонстрирует, как доступ к нему осуществляется из объекта Worksheet. Кроме этого, Вы увидите, что, ссылаясь на ячейку или диапазон ячеек на активном рабочем листе, можно не указывать этот лист в ссылке. Вновь встречаем ключевое слово Set, при помощи которого объект Range присваивается переменной Col.

Данный код VBA показывает также пример доступа к свойству Value объекта Range и изменение его значения.

'С помощью цикла просматриваем значения в столбце A на листе "Лист2",
'выполняем с каждым из них арифметические операции и записываем результат
'в столбец A активного рабочего листа (Лист1)

Dim i As Integer
Dim Col As Range
Dim dVal As Double

'Присваиваем переменной Col столбец A рабочего листа "Лист2"

Set Col = Sheets("Лист2").Columns("A")
i = 1

'Просматриваем последовательно все ячейки столбца Col до тех пор
'пока не встретится пустая ячейка

Do Until IsEmpty(Col.Cells(i))

   'Выполняем арифметические операции со значением текущей ячейки

   dVal = Col.Cells(i).Value * 3 - 1

   'Следующая команда записывает результат в столбец A
   'активного листа. Нет необходимости указывать в ссылке имя листа,
   'так как это активный лист рабочей книги.

   Cells(i, 1).Value = dVal
   i = i + 1

Loop

Оцените качество статьи. Нам важно ваше мнение:

��������� ������ Excel

��������� ������ Excel

�� ���.�1.5 ������������ ����������� ���������� ��������� ��������, ������ � ������� ����� ����������� �� VBA.

��� ����� �� ������������ �������, �������� (�������) ��������, ��������� � VBA, �������� Application. ��������� ������ �� ���� ������, ����� �������������� ��� ����� ���������� ����������� Excel, ��� � ������ ���������, ��� ������� �����, �����, ���������, ����, ����, ������ ������������,�� Application ������������� ������ �� ���� �������� Excel.

������ Application �������� ������� ���������� ��������� ��������. ��� ����� ���� � ���������, � �������� ����� ����������������� ��������������� (��� Assistant � ������ ��� ������ � ����������), � ������������ ����� ���������, ���������� ������ �������.

���.�1.5. ��������� �������� Microsoft Excel

���� ��������� �������� ��������� �������� ����� ������������ ���������:

� Cells � ���������, ���������� ��� ������ �������� �����;

� CommandBars � ���������, ���������� ��� ���� � ������ ������������;

� Comments � ���������, ���������� ��� ���������� �������� �����;

� ChartObjects � ���������, ���������� ��� �������-���������� ���������� � ������� ���� �������� (�� ������ ������� �� ������ ���������� ���������);

� Charts � ���������, ���������� ��� ����� �������� ������� �����;

� Dialogs � ��������� ����������� ���������� ���� Excel;

� Sheets � ���������, ���������� ��� ����� �����;

� Windows � ��������� ���� ������������ � Excel ����;

� Workbooks � ���������, ���������� ��� �������� � Excel ������� �����;

� Worksheets � ���������, ���������� ��� ������� ����� �����.

������ Selection (� ������, �������� ������� Application) ������������� ������ � ������, ���������� �� �������� ����� ������� �����. � Selection ����� ����������� ������ �� ������� ���������� ����. ��� ������� �� ����, ��� ������ �������� �� ����� (��������, ���� �������� ������, �� ��� ������� Selection � Range).

������� ������������ ����������� ������ Range. �� ����� ��������� ���� ������, �������� ����� ��� ��������� ���������� �����. ���� ������ ������������ ��� ������������� ��������� ��� ��������� �������� � ������� �������.

��������� ���������� � �������� ����� ������������ � ����� �������� Excel ��������� � ����������.

Понравилась статья? Поделить с друзьями:
  • Модель монте карло в excel примеры
  • Модель линейной оптимизации excel
  • Модель линейного тренда в excel
  • Модель корреляции в excel
  • Модель комнаты в microsoft word