Microsoft Office Excel - это популярные электронные таблицы. Обычно, программируя для этой программы, преследуют такие цели:
В общем виде программирование в Excel похоже на работу с Microsoft Word. Однако одно из главных отличий заключается в том, что в Excel рабочая область листа разбита на ячейки, каждая из которых имеет собственное имя. Имена ячеек могут быть двух видов.
A1 - ячейка, находящаяся на пересечении столбца А (первого) и первой строки.R1C1 ). Для адресации ячейки в таком стиле указывают номер строки (R - Row - строка) и номер столбца (C - Column - столбец), на пересечении которых расположена ячейка. Строки изначально пронумерованы, а номера столбцов начинаются с 1 - первому столбцу соответствует столбец A, второму - В и т.д. Например, (2, 3) - это адрес ячейки, находящийся на пересечении второй строки и третьего столбца, то есть, если переложить это на стиль A1 - получим ячейку С2 (рис. 13.1.)
(рис 13.1) Ячейка C2 на листе MS ExcelДля выполнения большинства операций в MS Excel применяются следующие объекты.
Excel.Application (Приложение) - объект, представляющий приложение Microsoft Excel, аналогичен Word.Application.Workbook (Worksheet (Рабочий лист) - книга в MS Excel разбита на рабочие листы. Именно на листе расположены ячейки, которые могут хранить информацию и формулы.Range (Диапазон) - может быть представлен в виде одной ячейки или группы ячеек. Этот объект заменяет множество объектов для работы с элементами документов ( character, word и т.д.), которые применяются в Microsoft Word. В результате работа с листом становится очень четкой и удобной - чтобы работать с какой-либо ячейкой, надо знать лишь ее имя (в формате A1) или адрес ( R1C1 ).QueryTable (Таблица запросов) - этот объект используют для импорта в Microsoft Excel информации из баз данных. PivotTable (Сводная таблица) - это особый вид электронной таблицы Excel - она позволяет в интерактивном режиме обобщать и анализировать большие объемы информации, в частности, взятой из базы данных.Chart (Диаграмма) - представляет собой диаграмму. Обычно их используют для визуализации данных.Давайте начнем рассмотрение Application.
13-01-Excel Application.xlsm - пример к п. 13.2.
Принципы работы с объектом Application в MS Excel очень похожи на таковые в MS Word.
Рассмотрим пример. Откроем MS Excel, добавим на рабочий лист кнопку, добавим в обработчик щелчка по кнопке такой код (листинг 13.1.).
MsgBox Excel.Application.Name
После выполнения программы в окне сообщения отобразится имя приложения - в данном случае - Microsoft Excel. Очевидно, что Name объекта Application возвращает имя приложения.
Теперь рассмотрим наиболее важные Application. Некоторые из них похожи на таковые в MS Word. Например, метод Quit точно так же, как в Word, закрывает приложение, свойство Visible отвечает за видимость окна программы и т.д.
Этот метод, вызываемый для объекта Application, позволяет пересчитать все открытия книги. Его же можно вызывать для отдельных книг (объект ) листов ( ), ячеек и их диапазонов ( Range ). Например, код из листинга 13.2. позволяет пересчитать все открытые книги.
Application.Calculate
13-02-Excel GoTo.xlsm - пример к п. 13.3.2.
Позволяет выделить любой
Полный вызов метода выглядит так:
Goto(Reference, Scroll)
В качестве параметра Reference используется ссылка на ячейку или
Параметр Scroll отвечает за "перемотку" листа Excel к выделенным ячейкам - так, чтобы левый верхний угол выделения совпадал бы с левым верхним углом отображаемой области листа. Если Scroll установлен в True - лист перематывается, если в False - нет.
Например, такой вызов (листинг 13.3.) позволяет выделить ячейку H500 на активном листе.
Application.Goto _
Reference:=ActiveSheet.Range("H500"), _
Scroll:=True
Как видите, обращение к активному листу очень напоминает обращение к активному документу в MS Word. Обратите внимание на то, что мы используем полное обращение к методу - Application.GoTo - как вы знаете, обычно свойства и методы объекта Application можно использовать в коде, не указывая этого объекта. Однако, если в этом случае не указать Application, то вместо метода GoTo программа попытается выполнить GoTo.
13-03-Excel SendKeys.xlsm - пример к п. 13.3.3.
Очень интересный метод - позволяет передавать в активное окно приложения нажатия клавиш. Полный вызов метода выглядит так:
SendKeys(Keys, Wait)
Параметр Keys позволяет задавать клавиши, нажатия которых будут переданы приложению. Метод поддерживает эмуляцию как алфавитно-цифровых, так и
Чтобы передать приложению нажатия клавиши Backspace - используйте код {BS}. Для передачи нажатия кнопки Enter используйте значок ~ ({DEL}.
Для передачи приложению нажатий клавиш Shift, Ctrl или Alt, можно воспользоваться следующими кодами этих клавиш:
+ (знак плюс)^ (крышка)% (знак процента)Параметр Wait может принимать значения True или False. Если он будет установлен в True - макрос подождет, пока приложение обработает введенные с "клавитуры" данные, после чего продолжит выполнение. Если в False - макрос ждать не будет.
Рассмотрим пример. С помощью метода SendKeys введем в ячейку A1 текст "Сейчас закрою программу!", после чего попытаемся закрыть программу, "нажав" сначала Alt, потом Ф (для открытия главного меню Office), и потом - Ы - для выхода из программы. Подразумевается, что при запуске макроса (листинг 13.4.) указанная ячейка активна - в ней находится рамка выделения.
Application.SendKeys ("Сейчас закрою программу!")
Application.SendKeys ("%ФЫ")
После выполнения этого кода вы увидите окно со стандартным вопросом о сохранении документа.
13-04-Excel Wait.xlsm - пример к п. 13.3.4.
Позволяет сделать паузу в выполнении макроса. Пауза может быть нужна для того, чтобы пользователь успел что-то рассмотреть или для того, чтобы на время освободить вычислительные ресурсы системы.
При вызове этого метода указывается время, на которое должно быть приостановлено выполнение макроса. После того, как истекает время, заданное при вызове метода, он возвращает True и выполнение программы продолжается. Например, в листинге 13.5. так можно остановить выполнение прораммы на 7 секуд, после чего - вывести сообщение.
If Application.Wait(Now + TimeValue("0:00:7")) Then
MsgBox "Семь секунд прошло!"
End If
Здесь мы получаем значение типа Date с помощью функции TimeValue. После того, как пройдут 7 секунд, выполнение макроса возобновится, метод возвратит True, будет выполнено условие и выведено сообщение.
13-05-Excel Active.xlsm - пример к п. 13.4.1.
Cвойства, имена которых начинаются с Active, позволяют обращаться к различным активным объектам.
ActiveCell возвращает объект типа Range, который представляет собой активную (выделенную) ячейку рабочего листа, отображаемого в данный момент на экране. Если при вызове этого свойства на экране нет открытого листа - произойдет ошибка.
Например, такой код (листинг 13.6.) выводит данные из
MsgBox ("В ячейке с именем " + Application.ActiveCell.Address + " хранится значение " + Application.ActiveCell.Value)
ActiveCell.Value = InputBox("Введите новое значение для ячейки " + ActiveCell.Address)
Очевидно, что свойство Value объекта ActiveCell содержит данные, которые записаны в ячейку, а свойство Address - адрес ячейки.
Остальные свойства этой группы предназначены для обращения к следующим объектам:
ActiveChart - к активной диаграмме.ActivePrinter - к активному принтеру.ActiveSheet - к активному листу. Это свойство очень часто используется на практике. Например, листинг 7.7. позволяет вывести имя активного листа.MsgBox Application.ActiveSheet.Name ActiveWindow - к активному окну. ActiveWorkbook - к активной рабочей книге.
Эти свойства возвращают соответствующие наборы объектов и коллекции. Подробности о них мы рассмотрим ниже, здесь лишь определим их основное предназначение.
Cells, Columns, Rows - возвращают наборы объектов Range, содержащие, соотвественно, ячейки, столбцы, строки. При вызове этих свойств можно указывать, какие именно объекты нужно возвратить, а можно, вызвав без параметров, получить все объекты нужного вида.Sheets, Worksheets - возвращают коллекции, которые содержат листы активной книги. В коллекции Sheets будут содержаться листы, которые содержат диаграммы и обычные листы, а в коллекции Worksheets - лишь обычные листы.Workbooks - возвращает коллекцию открытых книг.Names - возвращает коллекцию именованных диапазонов - с ними можно работать так же, как с закладками в MS Word.Возвращает объект Range, который ссылается на ячейку или группу ячеек. Это - один из важнейших объектов для работы с ячейками - ниже мы остановимся на нем подробнее.
13-06-Application ScreenUpdating.xlsm - пример к п. 13.4.4.
Позволяет включать (присвоением свойству True ) и отключать (присвоением False ) обновление экрана. Имеет смысл отключить обновление экрана перед теми частями программы, которые интенсивно пользуются данными на листе. Благодаря тому, что системные ресурсы не будут тратиться на обновление экрана, программа будет работать быстрее. Этот метод весьма актуален, так как MS Excel часто используют для проведения ресурсоемких расчетов.
Практика показывает, что если программа интенсивно использует вывод на экран в процессе работы, если она изменяет данные, которые участвуют в расчете формул, расположенных на листе, то отключение вывода может ускорить работу в 3-10 раз.
Например, ниже (листинг 13.8.) приведен код, который два раза повторяет процедуру 100-кратного вывода на экран 400 целых случайных чисел и выводит время, требующееся для выполнения этих действий с обновлением экрана и без него.
'Массив для значений времени
Dim WorkTime(2)
'Время начала теста
Dim StartTime
'Время окончания теста
Dim StopTime
'Включаем обновление
Application.ScreenUpdating = True
For i = 1 To 2
'Во втором проходе цикла
'выключим обновление
If i = 2 Then _
Application.ScreenUpdating = False
End If
'Запишем текущее время
StartTime = Time
'Перейдем на лист для теста
Worksheets("Тест скорости").Activate
'Выведем 100 раз целые случайные
'числа в область 20х20
For y = 1 To 100
For p = 1 To 20
For j = 1 To 20
ActiveSheet.Cells(p, j) = _
Int(Rnd * 100)
Next j
Next p
Next y
'Запишем время окончания
StopTime = Time
'Для корректного представления
'в виде секунд
WorkTime(i) = _
(StopTime - StartTime) * 24 * 60 * 60
Next i
Application.ScreenUpdating = True
MsgBox "Время выполнения программы." Chr(13) + _
"При включенном обновлении: " _
Round(WorkTime(1),2) " сек." Chr(13) _
"При выключенном обновлении: " _
Round(WorkTime(2),2) " сек."
Это очень важное свойство возвращает ссылку на выделенный объект. Чаще всего это - ячейка или группа ячеек. Например, это свойство удобно использовать при работе с выделенным
Возвращает объект WorksheetFunction, методы которого представляют собой формулы Excel, которые можно использовать в коде VBA. Использование этого свойства позволяет облегчить выполнение сложных расчетов.
13-07-Excel Application Events.xlsm - пример к п. 13.5.
Объект Excel.Application поддерживает множество Word.Application, которыми мы занимались в соответствующем разделе предыдущей главы.
Рассмотрим основные шаги, которые необходимо произвести, чтобы работать с событиями приложения, перечислим события и приведем пример.
Создайте новый модуль класса. Добавьте в него объявление объекта типа Excel.Application с событиями (листинг 13.9.).
Public WithEvents obj_ExApp As Excel.Application
После этого в списке объектов редактора кода модуля появится объект obj_ExApp, а в списке событий - соответствующие ему события. Выберите нужное вам событие - автоматически будет создан обработчик для него. В частности, Excel.Application поддерживает следующие события:
NewWorkbook - происходит при создании новой книгиSheetActivate - при активации любого листаSheetBeforeDoubleClick - происходит при двойном щелчке по листу, то есть позволяет перехватить щелчок и выполнить собственную процедуру до того, как будет выполнено стандартное действие.SheetBeforeRightClick - позволяет перехватить нажатие правой кнопки мыши по листу.SheetCalculate - после пересчета листа или после изменения данных, которые отображаются на диаграмме.SheetChange - при изменении содержимого ячеек на любом листе.SheetFollowHyperlink - происходит при переходе по гиперссылке, которая может быть включена в лист Microsoft Excel.SheetSelectionChange - при изменении выделения на листеWindowActivate - при активации окна книги.WindowDeactivate - при деактивации окна книги.WindowResize - при изменении размера окна книги.WorkbookActivate - при активации книги.WorkbookBeforeClose - перед закрытием книги.WorkbookBeforePrint - перед печатью книги.WorkbookBeforeSave - перед сохранением книги.WorkbookDeactivate - при деактивации книги.WorkbookNewSheet - при добавлении нового листа в любую из открытых книг.WorkbookOpen - при открытии книги.После того, как создан обработчик, написан его код, работа еще не окончена. Следующий шаг - это связывание объекта obj_ExApp с реально работающим приложением. Ниже приведен полный код модуля с одним обработчиком события, а также - процедура, служащая для связывания объекта obj_ExApp с работающим приложением. Эта процедура может существовать в виде отдельного макроса или в виде кода обработчика нажатия на кнопку. Ее выполнение можно назначить событию открывающейся книги, которая содержит данный модуль класса и т.д.
Итак, вот (листинг 13.10.) код процедуры, который связывает объект созданного нами класса AppEvents с приложением:
Dim obj_ExcelAppEv As New AppEvents
Sub EventsInit()
Set obj_ExcelAppEv.obj_ExApp = Excel.Application
End Sub
А вот (листинг 13.11.) полный код модуля класса AppEvents с объявлением объектной переменной и обработчиком события.
Public WithEvents obj_ExApp As Excel.Application
Private Sub obj_ExApp_NewWorkbook(ByVal Wb As Workbook)
'Выполняется при создании новой книги
MsgBox "Вы создали новую книгу"
End Sub
В этой лекции мы обсудили методы, свойства и события объекта Application приложения Microsoft Excel. Можно заметить, что некоторые из этих методов прямо указывают на то, что Excel - это приложение, рассчитанное на проведение достаточно серьезных расчетов. В следующей лекции мы рассмотрим особенности работы с документами MS Excel.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.