Тверской государственный университет
Опубликован: 13.09.2006 | Доступ: свободный | Студентов: 2720 / 260 | Оценка: 4.03 / 3.74 | Длительность: 19:48:00
Специальности: Программист, Менеджер
Лекция 1:

Word и его объекты

Лекция 1: 123456789101112 || Лекция 2 >

Свойства объекта Word.Application

Свойства любого объекта делятся на две группы: свойства-участники (объекты) и терминальные свойства (обычные переменные Visual Basic). Свойства-участники Word.Application приведены в таблицах 1.1 и 1.2. Там они были перечислены, сейчас мы рассмотрим их чуть более подробно. Но вначале несколько слов о более простой группе терминальных свойств.

Терминальные свойства

Терминальные свойства просты для понимания, и я не буду долго на них останавливаться. Большинство из них являются общими для всех объектов Application. Попытаюсь сейчас дать небольшой обзор терминальных свойств, объединяя их в группы:

  • Свойства Top, Left, Heihgt, Width, Caption определяют размеры и заголовок окна приложения.
  • Свойства, начинающиеся с префикса User, - UserAddress, UserName и другие задают характеристики пользователя.
  • Группа булевых свойств, начинающихся с префикса Display, - DisplayScreenTips, DisplayStatusBar и другие позволяют включать или выключать отображение на экране тех или иных элементов интерфейса.
  • Группа свойств, начинающихся префиксом Default - DefaultSaveFormat, DefaultTableSeparator позволяет устанавливать некоторые характеристики, используемые приложением по умолчанию.
  • Группа булевых свойств, использующих суффикс Available - MAPIAvailable, MouseAvailable, MathCoprocessorAvailable устанавливают доступность некоторых устройств.
  • Другие свойства - булевы и не булевы задают другие многочисленные характеристики, например, CapsLock и NumLock позволяют определить, нажаты ли на клавиатуре соответствующие клавиши, Path - путь к каталогу, содержащему Word, ActivePrinter - активный принтер и так далее.

Я приведу лишь один простой пример на использование терминальных свойств, полагая, что и так все понятно.

Public Sub WorkWithTerm()
	'Работа с терминальными свойствами
	'Выключаю опции
	Application. DisplayStatusBar = False
	Application. DisplayRecentFiles = False
	
End Sub
Листинг 1.1.

Изменяя терминальные свойства DisplayStatusBar и DisplayRecentFiles, я выключил панель статуса и показ в меню File файлов последнего использования. Убедившись в том, что они действительно выключились, я немедленно включил их уже руками, взведя соответствующие флажки в меню Tools|Options.

Рассмотрю подробнее лишь одно терминальное свойство, не столь тривиальное и отличающееся по своему духу от других свойств. Свойство IsObjectValid (obj As Object) и свойством назвать нельзя. Скорее это метод, аргументом которого является некоторый объект произвольного класса, а возвращаемое значение булевого типа показывает, существует ли объект, заданный аргументом метода (свойства). Это свойство полезно применять при работе, например, с коллекциями. Прежде чем начинать работу с тем или иным элементом коллекции, полезно проверить, а существует ли такой элемент, или, возможно, он уже был удален. Вот пример работы с этим свойством:

Public Sub IsObjectProp()
	'В этом примере используется свойство IsObjectValid
	Dim MyPath As String
	Dim SecondDoc As Document
	MyPath = ActiveDocument.Path
	'Определяем объект
	Set SecondDoc = Documents.Open(MyPath & "\DocTwo.doc")
	'Удаляем объект, возможно, по ошибке
	Documents(1).Close
	'Теперь нам объект понадобился
	If Not IsObjectValid(SecondDoc) Then
		'Добавляем элемент в коллекцию
		Set SecondDoc = Documents.Open(MyPath & "\DocTwo.doc")
	End If
	'Работа с документом DocTwo
	Debug.Print SecondDoc.Name
	
End Sub
Листинг 1.2.

Заметьте, при работе с этим свойством я использую созданный мной объект SecondDoc, поскольку не могу написать IsObjectValid (Documents("DocTwo")). Написать-то, конечно, могу, но при выполнении возникнет ошибка. Ошибка не связана с самой функцией IsObject, - она возникнет раньше при вычислении значения аргумента - Documents ("DocTwo"), поскольку в коллекции Documents этот элемент отсутствует.

Свойства - участники

Конечно, центральные объекты мира Word - это объекты, входящие в коллекции Documents и Templates, документы и шаблоны, открытые в приложении. Им-то и посвящена большая часть этой лекции. Но пока давайте хотя бы кратко коснемся объектов "второго плана".

Заголовки (CaptionLabels)

Коллекция объектов CaptionLabels (CaptionLabel) представляет заголовки, которые вставляются в документ одновременно со вставкой таблиц, рисунков, диаграмм и других подобных элементов документа. Следует отметить, что при вставке в документ каждого нового элемента определенного типа и его заголовка происходит автоматическая нумерация заголовков, (например, Рисунок 1, Рисунок 2 и т.д.).

В коллекцию разрешается добавлять новые заголовки и удалять существующие. При работе вручную следует выбрать в пункте Insert (Вставка) главного меню Word команду Caption (Название). В открывающемся диалоговом окне есть раскрывающийся список заголовков, из которого можно выбрать подходящий элемент и вставить его в документ. Кнопка New Label (Создать) позволяет добавить новый заголовок к уже имеющемуся списку. Кнопка Delete (Удалить) позволяет удалить заголовок. Вот как выглядит это окно:

Окно заголовков

Рис. 1.4. Окно заголовков

Работа руками нас интересует в малой степени, хотя, конечно, программист должен уметь это делать. Но давайте посмотрим, как это делается программно. Вначале добавим к существующей коллекции заголовков три своих заголовка:

Public Sub AddCaptions()
 'Работа с коллекцией заголовков
 
	Dim Item  As CaptionLabel
	With CaptionLabels
		Debug.Print .Count
		'Добавление трех заголовков
		.Add "Мой Рисунок"
		.Add "Диаграмма Excel"
		.Add "Мой Пример"
		Debug.Print .Count
		For Each Item  In CaptionLabels
			Debug.Print Item .Name
		Next Item 
		'Удаление последнего заголовка
		.item(.Count).Delete
	
	End With
End Sub
Листинг 1.3.

Вот результаты отладочной печати, появляющиеся в окне отладки (Immediate):

3 
6 
Figure
Table
Equation
Мой Рисунок
Диаграмма Excel
Мой Пример
Листинг 1.4.

Этот пример типичен для работы с коллекциями. Здесь добавляются и удаляются элементы коллекции, определяется их число, организуется цикл по всем элементам. Покажем теперь, как, используя эту коллекцию, можно программно вставлять в текст документа в нужном месте те или иные заголовки:

Public Sub InsertLabelInDoc()
	'Вставка заголовка в текст документа
		'Вставка заголовков
		With ActiveDocument
			.Paragraphs.Add
			.Paragraphs.Last.Range.Select
			Selection.InsertCaption Label:="Диаграмма Excel"
			.Paragraphs.Add
			.Paragraphs.Last.Range.Select
			Selection.InsertCaption Label:=CaptionLabels(CaptionLabels.Count)
		End With
End Sub
Листинг 1.5.

В данном примере дважды будет вставлен заголовок "Диаграмма Excel". Конечно, реально этот заголовок следует вставлять после (перед) соответствующей диаграммой, но в примере заголовки вставляются в конец документа, в последний его абзац. Заметьте, при вставке происходит автоматическая нумерация заголовков, так что в тексте документа появятся два таких заголовка:

Диаграмма Excel 1
Диаграмма Excel 2
Листинг 1.6.
Автозаголовки (AutoCaptions)

Коллекция объектов AutoCaptions (AutoCaption) представляет заголовки, которые могут быть автоматически добавлены при вставке в документ OLE-объектов. В эту коллекцию, конечно же, ни добавлять, ни удалять элементы не разрешается, но можно включить или отключить автоматическое добавление заголовка при вставке того или иного OLE-объекта. Работа вручную идет в уже упомянутом диалоговом окне, открываемом по команде Caption. Программно это можно делать так:

Public Sub >WorkWithAutoLabels()
 'Работа с коллекцией автозаголовков
	 Dim Item  As AutoCaption
 
		Debug.Print AutoCaptions.Count
		For Each Item  In AutoCaptions
			'Включение автоматической вставки заголовка
			item.AutoInsert = True
			Debug.Print Item .Name
		Next Item
		
	End Sub
Листинг 1.7.

Процедура WorkWithAutoLabels включает все автозаголовки и распечатывает их имена. Приведем первую семерку имен OLE-объектов из 28 объектов, которые можно добавить в текущий момент у меня на компьютере:

28 
Microsoft Word Table
Adobe Acrobat Document
Видеоклип
Microsoft Chat Room
Диаграмма Microsoft Excel
Лист Microsoft Excel
MIDI-файл
Листинг 1.8.
Автокоррекция (AutoCorrect)

Объект AutoCorrect поддерживает работу по автоматической коррекции набираемых текстов. Я широко использую возможности автокоррекции в своей работе. Чтобы не переключаться с русского на английский при печатании различных терминов, я ввел таблицу соответствующих замен. Теперь я печатаю "Ап", а получаю Application, печатаю "Во", а получаю Word и так далее. Возможности объекта AutoCorrect во многом совпадают с возможностями команды AutoCorrect (Автозамена) меню Tools. В следующем примере включаются все флажки, регулирующие процесс замены, и в коллекцию Entries, вложенную в объект, добавляются два элемента. Каждый элемент задается парой строк, первая из которых задает исходную строку, а вторая строку, заменяющую ее при автокоррекции печатаемого текста:

Public Sub WorkWithAutoCorrect()
	'Работа с объектом AutoCorrect
	'Включаются все флажки
	 With AutoCorrect
		.CorrectInitialCaps = True
		.CorrectSentenceCaps = True
		.CorrectDays = True
		.CorrectCapsLock = True
		.ReplaceText = True
		.ReplaceTextFromSpellingChecker = True
		.CorrectKeyboardSetting = True
		
		'В коллекцию Entries, задающую замены при автокоррекции,
		'добавляются два элемента.
		.Entries.AddName:="ДЕ", Value:="Диаграмма Excel"
		.Entries.AddName:="ГЕ", Value:="График Excel"

	End With
End Sub
Листинг 1.9.
Перемещение по тексту. Объект Browser

Объект Browser позволяет перемещать точку вставки, указывающую на объекты в документе. Перейти можно к предыдущей или следующей точке редактирования документа. Можно также предварительно выбрать целевой объект, это может быть таблица, заголовок, комментарий или другой из некоторого набора возможных объектов, а затем переходить к следующему или предыдущему объекту выбранного типа. Вручную это делается с помощью трех инструментальных кнопок, расположенных в самом низу вертикальной полосы прокрутки окна документа. Покажем, как программно, перемещаясь по заголовкам, можно помочь пользователю найти в документе нужный ему заголовок. Вот соответствующая процедура:

Public Sub WorkWithBrowser()
	'Работа с объектом Browser
	Dim myrprev As Range, myrnext As Range, Answer As String
	'Поиск нужного заголовка в диалоге с пользователем
	'Установить заголовок в качестве цели поиска
	Application.Browser.Target = wdBrowseHeading
	With ActiveDocument
		'Встать в начало документа
		.Paragraphs.First.Range.Select
		Set myrnext = Selection.Range
		Do
			Answer = InputBox("Это искомый заголовок? (Да/Нет)", "Заголовки", "Нет")
			If Answer = "Да" Then Exit Do
			'Передвинуться к следующему заголовку
			Application.Browser.Next
			Set myrprev = myrnext
			Selection.MoveEnd (wdParagraph)
			Set myrnext = Selection.Range
		Loop Until (myrprev = myrnext)
			
			If Answer = "Нет" Then
				MsgBox ("В данном документе нет других заголовков стиля Heading")
			End If
	End With
End Sub
Листинг 1.10.
Лекция 1: 123456789101112 || Лекция 2 >