Интернет-журнал "Домашняя лаборатория", 2007 №7
Шрифт:
Можно, конечно, повозиться с каждым документом: открывать, ставить нужный шрифт, отступы, сохранять в формате Word, потом Rtf… Если документов — два, да даже десять, то еще как-то можно справиться, а если их сорок или сто? И вот тут-то придут на помощь макросы.
Но как можно написать программу, да-да, настоящую программу на настоящем языке программирования, ничего не зная о нем, кроме того, что он существует? Это действительно было бы очень трудно сделать на C++ или даже Delphi. Но для написания программ на Visual Basic for Applications не надо особых знаний — они появятся в процессе работы. Важно лишь уметь думать.
Итак, начинаем.
Вначале я определился, что мне надо сделать с каждым
Я открыл пару документов из общей кучи и включил запись макроса, согласившись на его имя по умолчанию — все равно потом буду его редактировать. После начала записи макроса я стал обрабатывать документ, а Word скрупулезно переводил мои действия на язык Visual Basic for Applications. Выбрал "Правка — Выделить все", выбрал "Формат — Шрифт", поставил шрифт "Times New Roman", 12 пунктов, Черный цвет. Выбрал "Формат — Абзац", обнулил все отступы и поставил одинарный межстрочный интервал. Затем выбрал "Правка-Заменить", и, указав в графе "Формат — Абзац" для заменяемого — выравнивание влево, а для заменяющего — выравнивание по ширине, а также "Везде" в графе "Направление", провел замену во всем тексте (выделенном целиком еще на первом шаге).
После окончания всех этих действий я сохранил документ командой "Файл — Сохранить". Затем я выбрал команду "Файл — Сохранить" в формате Rtf и сохранил документ и в этом формате, после чего закрыл его и выбрал на панели записи макроса кнопку Остановить.
В принципе, назначив записанный макрос какой-нибудь кнопке или сочетанию клавиш, я мог бы на этом остановиться и обработать все документы, открыв их в Word и только нажимая на эту кнопку. Макрос бы просто выполнялся для каждого документа. Но нажимать на кнопку сорок-шестьдесят раз и сидеть около компьютера, ждать, пока все выполнится — не очень приятная перспектива. Хотелось бы, чтобы все было сделано автоматически, а самому пойти выпить кофе или чаю. Поэтому лучше использовать возможности программирования.
Итак, открываем редактор Visual Basic for Applications (рис. 5.1).
Рис. 5.1. Редактор Visual Basic for Applications
В левой части экрана редактора Visual Basic for Applications имеется окно, в котором отображены все открытые в Word в данный момент документы и содержащиеся в них программы — Менеджер проектов. (Если почему-либо он не отображается, из меню "Вид" редактора Visual Basic for Applications выберите пункт Окно проекта или нажмите комбинацию клавиш Ctrl и R.) Все открытые документы представлены в Менеджере проектов как папки в Проводнике Windows (рис. 5.2).
Рис. 5.2. Менеджер проектов
Развернув содержимое папки Normal (то есть макросов в шаблоне Normal.dot), выберем модуль NewMacros. Именно в этот модуль попадают все макросы, записанные пользователем. Поскольку записанный нами макрос — первый, то он сразу и откроется.
Вот его содержимое (рис. 5.3):
Sub
Макрос1'
' Макрос1 Макрос
' Макрос записан 27.01.00
'
Selection.WholeStory
With Selection.Font
Name = "Times New Roman"
Size = 12
Colorlndex = wdBlack
End With
With Selection.ParagraphFormat
LeftIndent = CentimetersToPoints(0)
Rightlndent = CentimetersToPoints(0)
SpaceBefore = 0. SpaceAfter = 0
LineSpacingRule = wdLineSpaceSingle
FirstLineIndent = CentimetersToPoints(1.27)
End With
Selection.Find.ClearFormatting
Selection.Find.ParagraphFormat.Alignment = wdAlignParagraphLeft
Selection.Find.Replacement.ClearFormatting
Selection. Find.Replacement.ParagraphFormat.Alignment =
wdAlignParagraphJustify
With Selection.Find
Text = ""
Replacement.Text = ""
Forward = True
Wrap = wdFindContinue
Format = True
MatchCase = False
MatchWholeWord = False
MatchWildcards = False
MatchSoundsLike = False
Ma tchAHWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
ActiveDocument.Save
ActiveDocument.SaveAs FileName:="Доклад!.rtf", FileFormat:=wdFormatRTF, _ LockComments:=False, Password:="", AddToRecentFiles:=True, WritePassword _ ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _
SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= _
False
ActiveWindow.Close
End Sub
Рис. 5.3. Наш записанный макрос.
Разберем все его строки более подробно.
Sub Макрос1
' Макрос1
'Макрос
' Макрос записан 13.01.02
'
Как нетрудно догадаться, это заголовок макроса. Слово "Sub" означает начало программы. Название программы — в данном случае "Макрос1" — является уникальным именем, по которому эту программу можно запустить из других программ этого модуля.
Знаки ' перед строчкой обозначают комментарии — то есть все, что стоит в той же строке после них, никак не влияет на работу программы. В окне редактора Visual Basic for Applications все комментарии отображаются зеленым цветом.
Selection.WholeStory
Скорее всего, это — переведенная на язык Visual Basic for Applications при записи макроса команда "Выделить все". В самом деле, ведь первое действие, выполненное в процессе записи — именно выделение всего текста. Подтвердить это нетрудно, просто поставив курсор на слово "WholeStory" и нажав кнопку вызова помощи F1. Справка языка Visual Basic for Applications устроена очень удобно — при ее вызове из редактора Visual Basic for Applications она "смотрит", не стоит ли курсор на одном из слов, являющихся командой Visual Basic for Applications, и, если курсор стоит именно на таком слове, то выводится справка, относящаяся к этой самой команде (рис. 5.4).
Рис. 5.4. Вот что показывает справка по слову WholeStory
Немножко непонятный текст, но при помощи словаря удастся перевести, что эта команда расширяет выделение на весь текст.
* * *
НЕБОЛЬШОЕ ОТСТУПЛЕНИЕ.
Конечно, при самом первом знакомстве с редактором Visual Basic for Applications эта информация вряд ли будет очевидной. Но стоит ее привести именно здесь, чтобы строение команд этого языка было более понятным.