Опубликован: 25.03.2009 | Уровень: для всех | Доступ: свободно | ВУЗ: Институт управления, бизнеса и права
Лекция 9:

Объектная модель MS Word, объект Application

< Лекция 8 || Лекция 9: 123 || Лекция 10 >

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. вы можете видеть окно проекта после создания модуля и добавления в него соответствующего кода.

Окно проекта после добавления модуля класса

увеличить изображение
Рис. 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. На очереди - другие объекты. В частности, в следующей лекции мы поговорим о работе с документами.

< Лекция 8 || Лекция 9: 123 || Лекция 10 >
Евгений Ушаков
Евгений Ушаков

Добрый день! Поясните, пожалуйста, 3000 р. стоит документ об окончании курса. Если он не нужен, то можно учиться бесплатно?

Александр Новиков
Александр Новиков

Добрый день! Очень нужен справочник по объектам VBA c описание их методов и свойств.

Кто-нибудь знает, где можно приобрести?

(Он конечно есть в VBA - Object browser, но не очень удобный)