Делаем макросы
Лабораторная работа №6. Тема: Редактирование макросов в Visual Basic for Application в Word
Visual Basic for Application в Word
Применяя Visual Basic for Application в Microsoft Word, можно создавать сложные виды документов, в которых используется и текст, и таблицы, и графические изображения, и автофигуры. Для каждого из этих компонентов предусмотрен отдельный объект, ряд свойств и методов, посредством которых можно выполнять такие же действия, что и в интерактивном режиме. Например, изменять толщину линии или придавать объем графическому объекту, увеличивать или уменьшать размер текста и многое другое.
Допустим нам требуется распечатать исходный текст некого документа, да не просто, а красиво. Например, хочется выделить в тексте документа текст в фигурных скобках курсивом.
Для документа, занимающего несколько страниц, вручную выделять все такие тексты - долго и утомительно. Так давайте напишем макрос!
Итак, начнем: меню Вид - Макрос - Начать запись.
Делаем доступным макрос для всех документов и приступаем к записи нажав кнопку ОК.
Производим переход в начало файла - жмем Cntrl + Home. Вызываем меню Найти и заменить, вводим текст для поиска "{" и жмем Найти. На первом найденном символе закрываем окно поиска. Далее, держа нажатой клавишу Shift, стрелками курсора выделяем текст внутри фигурных скобок включая символ "}". После этого делаем начертание выделенного текста курсивом.
Останавливаем запись макроса.
Теперь идем в редактор Microsoft Visual Basic (Вид - Макрос – (Изменить или Alt+F11) Редактор Visual Basic) и ищем там наш макрос. Он имеет следующий вид:
Sub Макрос1()
'
' Макрос1 Макрос
' Макрос записан 11.11.2007
'
Selection.HomeKey Unit:=wdStory
Selection.Find.ClearFormatting
With Selection.Find
.Text = "{"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute
Selection.MoveRight Unit:=wdCharacter, Count:=14, Extend:=wdExtend
Selection.Font.Italic = wdToggle
End Sub
Удалив лишнее получим следующий текст макроса:
Sub Макрос1()
'
' Макрос1 Макрос
' Макрос записан 11.11.2007
'
Selection.HomeKey Unit:=wdStory
Selection.Find.ClearFormatting
Selection.Find.Text = "{"
Selection.Find.Execute
Selection.MoveRight Unit:=wdCharacter, Count:=14, Extend:=wdExtend
Selection.Font.Italic = wdToggle
End Sub
Теперь добавим цикл по символам для нахождения "}" и выделим необходимое число символов для форматирования в начертание курсивом:
Sub Макрос1()
'
' Макрос1 Макрос
' Макрос записан 11.11.2007
'
Selection.HomeKey Unit:=wdStory
Selection.Find.ClearFormatting
Selection.Find.Text = "{"
Selection.Find.Execute
i = 0
While Selection.Text <> "}"
Selection.MoveRight Unit:=wdCharacter, Count:=1
i = i + 1
Wend
Selection.MoveRight Unit:=wdCharacter, Count:=1
i = i + 1
Selection.MoveLeft Unit:=wdCharacter, Count:=i, Extend:=wdExtend
Selection.Font.Italic = True
Selection.MoveRight Unit:=wdCharacter, Count:=1
End Sub
Осталось добавить цикл по всему документу:
Sub Макрос1()
'
' Макрос1 Макрос
' Макрос записан 11.11.2007
'
Selection.HomeKey Unit:=wdStory
Selection.Find.ClearFormatting
Selection.Find.Text = "{"
While Selection.Find.Execute=True
i = 0
While Selection.Text <> "}"
Selection.MoveRight Unit:=wdCharacter, Count:=1
i = i + 1
Wend
Selection.MoveRight Unit:=wdCharacter, Count:=1
i = i + 1
Selection.MoveLeft Unit:=wdCharacter, Count:=i, Extend:=wdExtend
Selection.Font.Italic = True
Selection.MoveRight Unit:=wdCharacter, Count:=1
Wend
End Sub
На этом все. Макрос готов к работе.