2. О чем мы узнаем
Объектная модель MS Excel
Методы объекта Application
Свойства объекта Application
События объекта Application
3. Цели программирования для Excel
• Автоматизация вычислений
• Автоматизация ввода и обработки информации
• Работа с базами данных – вывод, ввод, анализ,
визуализация информации
• Анализ финансовой и другой информации
• Создание систем для организации
автоматизированного ввода данных
• Математическое моделирование
6. Внешние объекты
QueryTable Подключение к БД
Анализ данных PivotTable
Chart Визуализация
7. Объект Application
• Представляет все приложение Excel
• Находится на самом верхнем уровне объектной
модели
• Для вызвать Excel из другого приложения, нужно
создать объект Excel.Application
• В меню Tools | References добавить ссылку на
Microsoft Excel 14.0 Object Library
Dim oExcel As New Excel.Application
oExcel.Workbooks.Add
oExcel.Visible = True
8. Объект Application
• Если вы работаете из уже
запущенного Excel, объект Application
уже доступен
• Равнозначные строки кода:
• Application.Workbooks.Add
• Workbooks.Add
9. Application: свойства
• Active...
• ActiveCell, ActiveSheet, ActiveChart, ActivePrinter
MsgBox ("В ячейке с именем " + _
Application.ActiveCell.Address + _
" хранится значение " + _
Application.ActiveCell.Value)
ActiveCell.Value = _
InputBox("Введите новое значение для ячейки " + _
ActiveCell.Address)
11. Application: свойства
• Cells
• возвращает объект Range – все ячейки в
активном листе активной книги
• Item – свойство по умолчанию для объекта
Range
• Application.Cells(1, 2).Font.Bold = True
• Свойства Columns и Rows действуют очень
похоже
• Application.Columns(2).Font.Bold = True
• Application.Rows(2).Font.Bold = True
12. Application: свойства
• Cursor
• Application.Cursor = xlWait
• MsgBox ("Cursor has changed")
• Application.Cursor = xlDefault
• DataEntryMode
• разрешается только вводить данные в
разблокированные ячейки выбранного
диапазона
• DecimalSeparator и ThousandsSeparator
• Application.UseSystemSeparators = False
14. Application: свойства
• FileSearch
• Interactive
• International, LanguageSettings
• LibraryPath – путь к каталогу с
надстройками
• Office11Library
• MoveAfterReturn
• Application.MoveAfterReturnDirection =
xlToRight
15. Application: свойства
• Names – коллекция всех именованных
диапазонов
• метод Add()
• ODBCErrors и OLEDBErrors
• Коллекции объектов ODBCError и OLEDBError
• OnWindow - имя процедуры, которая должна
находиться в модуле уровня книги
• вызывается всякий раз, когда пользователь
переключился в окно Excel
• Auto_Activate и Auto_Deactivate
16. Application: свойства
• Range – возвращает диапазон ячеек
• ReferenceStyle
• Application.ReferenceStyle = xlR1C1
• Selection
• Sheets и Worksheets
• TemplatesPath
• Application DataMicrosoftTemplates
17. Application: свойства
• ThisCell и ThisWorkbook
• Windows, Workbooks и Sheets
• WorkSheetFunction – использование в
программе функций Excel напрямую
• Не прописывая в ячейку
18. Application: методы
• ActivateMicrosoftApp()
• Word, Access, PowerPoint, Project, FoxPro,
Schedule Plus
• AddCustomList() и DeleteCustomList()
• объект Range как параметр
• Calculate(), CalculateFull(),
CalculateFullRebuild()
• Останов по вызову CheckAbort()
• ConvertFormula()
• DoubleClick()
19. Application: методы
• Evaluate() - по имени найти объект книги Excel и
преобразовать его в объект или значения
• Допустимые имена:
• имена ячеек в стиле A1
• возвращается объект Cell
• имена диапазонов
• возвращается объект Range
• имена, определенные в макросе
• названия переменных
• ссылки на внешние книги
• Evaluate("[Book1.xls]Sheet1!A5"))
20. Application: методы
• Evaluate можно вызвать и неявно
• имя объекта в квадратных скобках
• равнозначные строки :
• [a1].Value = 25
• Evaluate("A1").Value = 25
• чаще всего используется синтаксис с
квадратными скобками
• самый простой и естественный метод
обратиться к ячейке или диапазону
21. Application: методы
• GetOpenFilename()
Filename = Application.GetOpenFilename()
If Filename <> False Then
Debug.Print Filename
End If
• GetSaveAsFilename()
22. Application: методы
• GoTo() - выделяет и активизирует диапазон
или ячейку или запускает на выполнение
процедуру
Application.Goto _
Reference:=ActiveSheet.Range("H500"), _
Scroll:=True
• Help()
• Intersect() - возвращает диапазон, общий
для двух или более диапазонов
23. Application: методы
• OnKey() – назначение клавиш процедурам
• Alt+M для процедуры Msg() из модуля
Лист1
• Application.OnKey "%{m}", "Лист1.Msg"
• OnRepeat() и OnUndo()
• RegisterXLL()
• Repeat()
• Run()
24. Application: методы
• SendKeys(Keys, Wait)
• Keys:
• {BS}
• ~ (тильда) для Enter
• {DEL}
• SHIFT - + (знак плюс)
• CTRL - ^ (крышка)
• ALT - % (знак процента)
• Wait : True или False
• Application.SendKeys ("Сейчас закрою программу!")
25. Application: методы
• Union()
• Volatile()
• Wait()
If Application.Wait(Now + TimeValue("0:00:5")) Then
MsgBox "Пять секунд прошло"
End If
• Quit()
• OnTime()
• Application.OnTime TimeValue("17:00:00"),
"my_Procedure"
26. Application: события
Основные шаги:
• Создаем новый модуль класса
• Добавляем в него объявление объекта Application
• Public WithEvents obj_ExApp As Excel.Application
• Пишем обработчик нужного события
• Пишем процедуру связи объекта с реальным приложением
Dim obj_ExcelAppEv As New AppEvents
Sub EventsInit()
Set obj_ExcelAppEv.obj_ExApp = Excel.Application
End Sub
28. Подводим итоги
• Excel имеет весьма богатую объектную модель, в
основе которой лежит объект Application
• Application имеет массу свойств, методов и
событий, которые можно использовать для
программного доступа к приложению
• Недостаточно написать обработчик события –
нужно создать процедуру, привязывающую
задекларированный объект Application к реально
действующему приложению
30. Практика
Dim obj_ExcelAppEv As New AppEvents
Sub EventsInit()
Set obj_ExcelAppEv.obj_ExApp = Excel.Application
End Sub
Public WithEvents obj_ExApp As Excel.Application
Private Sub obj_ExApp_NewWorkbook(ByVal Wb As Workbook)
'Выполняется при создании новой книги
MsgBox "Вы создали новую книгу"
End Sub
32. Контрольные вопросы
• Какие объекты Excel, кроме Application, вы
знаете?
• Какие свойства позволяют получить
доступ к активной ячейке, принтеру, и т.д?
• Как отправить в приложение нажатия
клавиш Alt+F, X для выхода из
программы?
• Как получить возможность создавать
обработчики событий для Application?