О стоимости курса |
Объектная модель 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.)
Для выполнения большинства операций в 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, будет выполнено условие и выведено сообщение.