Основной упор в данной главе сделан не столько на непосредственное достижение нужного результата, сколько на демонстрацию процесса самостоятельного изучения неизвестного ранее языка программирования, освоение принципов которого может помочь вам впоследствии быстро осваивать новые средства разработки без учебников и руководств или с минимальным их использованием.
Напомню, что Microsoft Word в качестве основы для обучения программированию выбран потому, что именно эта программа из всех компонентов Microsoft Office является наиболее частоиспользуемой, и надобность в расширении его возможностей возникает чаще, чем необходимость дополнения остальных программ из пакета. В качестве основной среды разработки выбрана версия Microsoft Office 97, так как, во-первых, программы, написанные в ней, будут работать и в более старших версиях Microsoft Office[231], а, во-вторых, в русской версии Microsoft Office 97 справочная система по Visual Basic for Applications частично русифицирована, что может серьезно помочь в самостоятельном освоении этого языка.
* * *
У программы Microsoft Word есть огромное количество возможностей по работе с текстом. И огромные возможности по замене и поиску, и средства помещения в документ графики, не уступающие многим современным издательским системам, и средства оформления документов красивыми шрифтами и границами… Казалось бы — что еще надо, все необходимые возможности уже учтены создателями Word? Однако иногда перед пользователями встают такие задачи, разрешить которые с помощью стандартных средств Word очень трудно, а то и вовсе невозможно. Но для этого в Word, как, впрочем, и во всех компонентах пакета Microsoft Office, есть очень мощное средство разрешения подобных проблем: встроенный язык программирования — создания макросов.
Вот наглядный пример, когда именно написание макроса — единственный более-менее достойный выход из проблемы.
Все документы на моем компьютере оформлены приблизительно одинаково — для удобства редактирования, переноса текста из одного документа в другой и др.
Можно даже сказать, в чем заключаются эти мои предпочтения — шрифт Times New Roman, 12 пунктов, выделения — жирным и курсивом, выравнивание по ширине, все отступы абзацев равны нулю, а табуляция — 1 см. Именно в таком "формате" я держу все свои документы Word. Кроме того, я очень люблю формат Rtf и стараюсь, по возможности, делать копии своих документов в этом формате. Но вот из Internet'а я скачал 20 файлов с интересующей меня информацией — скажем, рефератов по актуальным вопросам кардиологии. И все они были набраны разными людьми в соответствии с предпочтениями каждого: везде разный шрифт,
разные размеры шрифта, отступы абзацев — все вкривь и вкось, выравнивание — то влево, то по ширине. В общем, работы по приведению в одинаковый вид — куча. (Для тех, кто является решительным противником однообразия оформления своих документов, приведу другую ситуацию: вы являетесь организатором конференции, на которую все заинтересованные лица прислали свои доклады, и Вам надо привести их в однообразный вид для помещения в Internet, например, или для последующей отдельной распечатки каждого доклада.)
Можно, конечно, повозиться с каждым документом: открывать, ставить нужный шрифт, отступы, сохранять в формате Word, потом Rtf… Если документов — два, да даже десять, то еще как-то можно справиться, а если их сорок или сто? И вот тут-то придут на помощь макросы.
Но как можно написать программу, да-да, настоящую программу на настоящем языке программирования, ничего не зная о нем, кроме того, что он существует? Это действительно было бы очень трудно сделать на C++ или даже Delphi. Но для написания программ на Visual Basic for Applications не надо особых знаний — они появятся в процессе работы. Важно лишь уметь думать.
Итак, начинаем.
Вначале я определился, что мне надо сделать с каждым документом. Во-первых, обязательно заменить шрифт на Times New Roman, 12 пунктов. Кроме того, необходимо сделать весь текст одного цвета. Во-вторых, убрать все отступы абзацев. В-третьих, заменить все выравнивание по левому краю выравниванием по ширине. Наконец, нужно обработать все документы, предварительно сохранив каждый в формате Rtf.
Я открыл пару документов из общей кучи и включил запись макроса, согласившись на его имя по умолчанию — все равно потом буду его редактировать. После начала записи макроса я стал обрабатывать документ, а 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 =
231
За некоторым исключением — отдельные команды из новых версий Visual Basic for Applications убраны. Впрочем, их не так много и они используются в весьма специфических целях.