VBA для чайников - Стив Каммингс
Шрифт:
Интервал:
Закладка:
Знакомство с объектом Application
Как и во всех других VBA-приложениях, ключевым в объектной модели Word является объект Application. Другими словами, этот объект содержит все остальные объекты Word. Поскольку объект Application занимает центральное место в программировании на VBA в Word, вам даже не придется явно указывать его имя при работе со многими важными объектами. Однако вам не следует забывать о роли, которую играет этот объект, поскольку он вам потребуется при работе со свойствами и методами самого приложения, а также при обращении к некоторым другим объектам. Например, приведенная ниже инструкция использует метод List Commands объекта Application:
Application.ListCommands (True)
Между прочим, метод List Commands создает новый документ и помещает в него таблицу, содержащую комбинации клавиш и команды меню Word. Если вы передаете методу List Commands значение True, новый документ содержит комбинации клавиш и команды меню Word. Передайте ему значение False, чтобы в нем перечислялись только команды.
Доступ к документам Word с помощью VBA
Если написанная вами VBA-процедура функционирует прямо в документе, вы должны указать объект этого документа непосредственно в коде, Часто вы сможете сделать это неявным образом, используя объект Selection, о котором я расскажу дальше в настоящей главе. Однако в остальных ситуациях вам придется явно идентифицировать целевой объект.
Работа с активным документом
Типичная VBA-процедура в Word выполняет все свои магические действия в том документе, который в данный момент открыт для редактирования. Для указания активного документа используется объект ActiveDocument. Например, приведенная выше инструкция просто закрывает активный документ:
ActiveDocument.Close
Как видите, вам не нужно писать код для определения того, какой же документ редактируется в данный момент: достаточно просто использовать объект ActiveDocument.
Если вам необходимо работать с определенным документом, который сейчас не активен, вы должны указать его как члена коллекции Documents, состоящей изо всех документов, открытых в настоящее время в Word. Как и в случае с любой другой коллекцией объектов в VBA, вы можете обратиться к отдельному документу в коллекции, используя его заголовок, который в данном случае совпадает с именем файла (только именем файла, а не с полным путем к нему). Вот соответствующий пример;
Documents("Toy Store News letter.doc")
Поскольку вы не знаете точно имя файла целевого документа заранее, а пользователь может в любой момент его изменить, вам следует создать переменную, которая будет содержать имя файла. После этого вы можете использовать эту переменную для указания объекта документа, например, так: Documents (strDocName).
Вы также можете обратиться к документу по его индексному номеру. Следующая инструкция, например, обращается к третьему документу в коллекции Documents:
Documents(3)
Несмотря на всю простоту, этот метод достаточно ограничен, поскольку вы редко когда знаете индексный номер документа, с которым хотите работать. При этом вам стоит узнать имя открытого документа. Например, следующая инструкция присваивает переменной имя файла второго открытого документа:
strDocName = Documents(2).Name
Для создания нового документа используйте метод Add коллекции объектов Documents. Используемый без каких-либо документов, метод Add создает новый документ, базирующийся на шаблоне Normal (Обычный). Для указания другого шаблона укажите путь к нему в качестве аргумента, как показано ниже:
Documents.Add template:= _
"C:WindowsApplication DataXMicrosoftHidden templates"
Для открытия существующего документа используйте метод Open коллекции объектов Documents. Конечно же, вам необходимо указать полный путь к документу, как показано ниже:
Documents.Open FileName:= _
"С:ToysToys for infants.doc"
Для активизации уже открытого документа используйте метод Activate коллекции объектов Documents. Предположим, что вам необходимо, чтобы ваша VBA-программа активизировала определенный документ, который в момент запуска программы может быть и открыт, и закрыт. Используйте код, подобный показанному ниже, для активизации открытого документа или открытия документа, если он еще не открыт:
Sub DocActivateOrOpen()
Dim docFileName As String, docPath as String
docFileName = "Старые игрушки.doc"
docPath - "C:Toys"
For Each target Doc In Documents
If targetDoc.Name = docFileName Then
targetDocIsOpen = True
End If
Next targetDoc
If targetDocIsOpen = True Then
Documents(docFileName).Activate
Else
Documents.Open FileName := docPath & docFileName
End If
End Sub
Поскольку каждый документ Word состоит из одного или нескольких разделов, вы можете ожидать, что Word VBA содержит коллекцию Sections и отдельные объекты Section для работы с этими элементами. Так оно и есть. Наиболее важное применение объектов Section - организация доступа к верхним и нижним колонтитулам (через объект Header Footer ). Вы можете добавлять новые разделы в документ, используя метод Add коллекции Sections или метод Insert Break объекта Range или Selection.
Открытие окон с помощью VBA
Каждый открытый документ содержит как минимум одно окно, а пользователь Word может открыть столько окон, сколько нужно для работы с любым документом. Каждое из подобных окон- объект с его собственными правами. В объектной модели Word объект Application содержит коллекцию Windows, содержащее все окна для всех открытых документов. Кроме того, каждый объект Document содержит свою собственную коллекцию объектов Windows.
Две основные причины работы с объектами Window в Word- контроль над внешним видом окна, а также манипулирование содержимым документа с помощью объекта Selection. Объект Selection я подробно рассмотрю в следующем разделе настоящей главы; здесь же я остановлюсь на приеме, позволяющем определить конкретное окно, а также познакомлю со свойствами, которые вы сможете использовать для определения внешнего вида окна.
Обращение к окнам из программного кода
Прямо из программного кода проще всего обращаться к тому окну, в котором открыт редактируемый документ во время запуска процедуры. Для указания окна используется объект ActiveWindow.
Для определения окна прямо в программном коде вам следует определить его как члена одной из коллекций Windows. При работе с глобальной коллекцией объектов Windows вам не нужно указывать собственно объект Application. При обращении к коллекции объектов Windows определенного документа, указывать имя объекта этого документа нужно обязательно. Вы можете идентифицировать окно по его имени или индексному номеру в коллекции. Имя окна совпадает с именем документа, который в нем отображается, за исключением того, что если для одного документа открыто несколько окон, после указания имени документа следует ставить точку с запятой, после которой указать номер окна.
Ниже приведены типичные ссылки для объектов Window.
Ссылка
Комментарии
Windows ( "Document 4" )
Действительна, если для документа Document 4 открыто только одно окно
Windows ("Kites and skipropes.doc: 3")
Указывает на третье окно документа
Documents("Window display.doc") .Windows (2)
Указывает на второе окно в коллекции Windows данного документа
Работа с областями окон
Когда вы разделяете окно с помощью команды Окно=Разделить, верхняя и нижняя часть окна являются отдельными областями. Окно Word содержит как минимум одну область, но может содержать и больше областей. В областях Word также отображает и такие сведения, как верхние и нижние колонтитулы, сноски и комментарии.
Если вам необходимо получить доступ к настройкам внешнего вида выделения в отдельной области, вы должны сначала идентифицировать в программном коде целевой объект Рапе. Обращение к определенному объекту осуществляется по его номеру в коллекции объектов Panes для данного окна. Однако вы можете опустить ссылки на области в том случае, когда вам необходимо работать со стандартной основной частью окна (или верхней частью, если окно разделено).
Изменение внешнего вида окна
Объекты Window предлагают большое количество свойств, определяющих состояние всех элементов, которые вы видите на экране. Основная часть этих свойств может принимать только одно из двух возможных значений - True или False. Например, чтобы включить схему документа для активного документа, используйте следующую инструкцию:
ActiveWindow.DocumentMap = True
Используйте подобные инструкция для включения или выключения различных свойств, таких как DisplayScreenTips или DisplayVerticalScrollBar. He забывайте о том, что ключевое слово Not обращает текущее значение логической переменной или свойства. Вот пример изменения значения свойства:
ActiveWindow.Displ ayRul es = _
Not ActiveWi ndow.DisplayRules
Свойства Left, Top, Height и Width позволяют вам определять размер и расположение окна, которое не развернуто на весь экран.