О стоимости курса |
Объектная модель MS Word, объект Application
9.5.13. StatusBar - вывод информации в строку состояния
09-07-Status Bar.docm - пример к п. 6.3.2.13
Модифицировав свойство StatusBar вы можете записать любой текст в строку состояния Microsoft Word. Туда можно выводить сообщения о ходе выполнения какой-нибудь длительной операции и т.д. В листинге 9.31. приведен пример использования этого свойства.
Application.StatusBar = "Пожалуйста, подождите..."Листинг 9.31. Вывод фразы в StatusBar
9.5.14. System - системная информация
09-08-System.docm - пример к п. 9.5.12.
Это свойство возвращает объект System, который дает доступ к различной системной информации (о разрешении экрана, типе процессора, объеме свободного места на жестких дисках и т.д.)
Например, свойство FreeDiskSpace объекта System позволяет узнать размер свободного пространства на текущем жестком диске (листинг 9.32.)
Dim var_DiskSize As Variant var_DiskSize = Application.System.FreeDiskSpace var_DiskSize = Int(var_DiskSize / (1024 ^ 2)) If var_DiskSize >= 2047 Then _ MsgBox ("На текущем HDD более 2 Гб свободного места") _ Else MsgBox ("Размер свободного места на текущем диске " + _ "равен " + Str(var_DiskSize) + " Мб")Листинг 9.32. Определение свободного дискового пространства
В этом примере мы учитываем тот факт, что при определении свободного места свойство FreeDiskSpace, во-первых, возвращает значение в байтах, а во-вторых - максимальное значение, возвращаемое функцией, не превышает 2,147,483,647 байт, то есть 2048 Мб или 2 Гб. Для получения значения в мегабайтах мы делим полученное значение на 1024 во второй степени.
9.5.15. Tasks - работа с запущенными приложениями
09-09-Tasks.docm - пример к п. 9.5.15.
Это свойство возвращает коллекцию Tasks, которая дает доступ ко всем приложениям, запущенным в системе. Давайте рассмотрим пример работы с приложением Notepad.exe (Блокнот), которое представлено в системе процессом Блокнот. Напишем программу (листинг 9.33.), которая проверяет, запущен ли Блокнот, если запущен - выводит сообщение "Блокнот уже запущен", активирует его окно. Если Блокнот не запущен - запускает его, сообщив об этом.
If Application.Tasks.Exists("Блокнот") = True Then MsgBox ("Блокнот уже запущен") With Tasks("Блокнот") .Activate .WindowState = wdWindowStateMaximize End With Else MsgBox "Запускаем Блокнот..." Shell ("Notepad.exe") With Tasks("Блокнот") .Activate .WindowState = wdWindowStateMaximize End With End IfЛистинг 9.33. Работа с внешним приложением из MS Word
9.5.16. Visible - скрытие окна MS Word
Visible позволяет скрыть окно Microsoft Word. Если присвоить ему значение False - окно приложения будет скрыто, причем даже с панели задач Windows. Если значение True - окно снова отобразится.
9.5.17. Windows - работа с окнами
09-10-Windows.docm - пример к п. 9.5.17.
Это свойство возвращает коллекцию Windows, которая содержит окна всех открытых документов. Она позволяет управлять окнами. Например, код листинга 9.34. располагает окна на экране без перекрытия:
Application.Windows.Arrange (wdTiled)Листинг 9.34. Располагаем окна на экране без перекрытия
Посмотрите на листинг 9.35. Он иллюстрирует применение коллекции Windows:
For i = 1 To Application.Windows.Count With Application.Windows.Item(i) .Activate .WindowState = wdWindowStateNormal .Width = 400 .Height = 400 .Left = i * 10 - 10 .Top = i * 10 - 10 End With Next iЛистинг 9.35. Работа с окнами документов
Здесь мы перебираем по очереди все окна (свойство Count коллекции Windows ), активируем каждое из них ( Activate ), после чего устанавливаем параметр WindowsState (Состояние окна) в значение wdWindowsStateNormal (иначе, если окно развернуто на весь экран, мы не сможем изменить его размеры и получим сообщение об ошибке). Далее, устанавливаем ширину и высоту окна по 400 пикселей и размещаем окна каскадом от левого верхнего угла экрана (координата 0,0), располагая каждое следующее окно правее и ниже предыдущего на 10 пикселей.
9.6. События объекта Application
09-11-События.docm - пример к п. 9.6.
Как и любые другие объекты, Application может реагировать на различные события. Чтобы события объекта отображались в редакторе, нужно воспользоваться особой методикой. Во-первых - вставьте в ваш VBA-проект модуль класса командой Insert - Class Module (Вставить - Модуль класса) или любым другим удобным для вас способом. Теперь разместить в модуле такое объявление (листинг 9.36.).
Public WithEvents obj_Application As Word.ApplicationЛистинг 9.36. Объявляем новую объектную переменную
После этого в списке объектов модуля появится новый объект obj_Application, который будет представлять собой приложение Microsoft Word. В списке событий доступны для выбора различные события, соответствующие этому объекту. Например, следующие:
- DocumentBeforeClose (Перед закрытием документа) - событие генерируется непосредственно перед закрытием одного из открытых документов. В этот обработчик можно вставить, например, команды проверки документа, команды сохранения копий документа и т.д.
- DocumentBeforePrint (Перед печатью документа)
- DocumentBeforeSave (Перед сохранением документа)
- DocumentChange (Изменение документа) - это событие гененируется при создании нового документа, открытии существующего или тогда, когда любой документ становится активным.
- DocumentOpen (Открытие документа)
- NewDocument (Создание нового документа)
- Quit (Выход из Microsoft Word)
- WindowActivate (Активация окна документа)
- WindowBeforeDoubleClick (Перед двойным щелчком) - происходит после двойного щелчка в области редактирования документа до выполнения стандартной процедуры обработчика двойного щелчка.
- WindowBeforeRightClick (Перед щелчком правой кнопкой мыши)
- WindowDeactivate (Деактивация окна)
- WindowSelectionChange (Изменение выделенной области)
- WindowSize (Размер окна) - происходит при изменении размеров или перетаскивании окна.
Если вы создадите модуль класса, объявите в нем объект приложения, создадите обработчики, они не будут работать без специальной подготовки. Дело в том, что прежде чем обработчики для Word.Application заработают, нужно связать переменную, представляющую приложение, с приложением. Это можно сделать из какого-нибудь другого модуля. Например, чуть ниже мы познакомимся с автоматически выполняемыми макросами - их можно использовать для подобных целей.
Создадим новый документ Microsoft Word, в редакторе VBA добавим к нему новый модуль класса, назовем его AppEventsModule. Разместим в нем сначала объявление объектной переменной так, как указано выше, а потом создадим пару обработчиков, например, для событий NewDocument и WindowSelectionChange, в которые добавим код вызова окна сообщения с соответствующими сообщениями, указывающими на выполнение данного обработчика. Ниже, на рис. 9.2. вы можете видеть окно проекта после создания модуля и добавления в него соответствующего кода.
Теперь перейдем из редактора в документ, переключимся в режим конструктора, создадим в документе новую кнопку, назовем ее cmd_initObject подпишем как Инициализация, и напишем для нее такой код (листинг 9.37.):
Dim obj_Module As New AppEventsModule Private Sub cmd_InitObject_Click() Set obj_Module.obj_Application = Word.Application End SubЛистинг 9.37. Связываем переменную с приложением
Мы не случайно привели здесь полный код обработчика - дело в том, что переменная obj_Module должна быть объявлена не внутри обработчика, а в разделе объявлений модуля. Давайте подробнее рассмотрим этот код.
Выше мы не работали с модулями класса, поэтому сейчас нас ждут некоторые неожиданности. Первая неожиданность возникает при объявлении переменной obj_Module. Как вы помните, при создании модуля класса мы задали его имя - AppEventsModule. Это имя может быть произвольным, главное - оно должно соответствовать общим правилам именования объектов и переменных VBA. В модуле мы объявили переменную obj_Application, которая должна представлять приложение. Итак, объявляя переменную obj_Module мы задаем для нее тип данных AppEventsModule - то есть создаем на основе класса AppEventsModule новый объект. В обработчике события нажатия кнопки cmd_InitObject мы связываем переменную объекта obj_Application (если следовать объектно-ориентированной терминологии, правильнее будет назвать ее свойством) с приложением Microsoft Word.
После того, как код обработчика для кнопки создан, выйдите из редактора VBA в документ, выключите режим конструктора, нажмите на кнопку и попытайтесь выполнить одно из действий, для которых в модуле AppEventsModule созданы обработчики. Если все сделано верно - вы увидите соответствующие этим обработчикам окна сообщений.
9.7. Выводы
В этой лекции мы обсудили методы, свойства и события объекта Application приложения Microsoft Word. На очереди - другие объекты. В частности, в следующей лекции мы поговорим о работе с документами.