Как уже неоднократно упоминалось, язык VBA называется объектно-ориентированнным. Такое название дано этому языку, как, впрочем, и большому количеству других современных языков программирования, из-за особого строения его команд (более подробно синтаксис VBA был описан во второй главе). Типичная команда Visual Basic имеет такой вид: <Объект>.<Объект, входящий в первый объект>.<…>.<Тот объект, с которым нужно произвести действие>. «Собственно действие>. Иными словами, каждая команда пишется как бы "с конца": вначале определяется то, над чем надо произвести действие — объект, а затем само действие — метод. Разделителями компонентов команды служат точки. Вот пример такой команды:
Selection.Font.Size = 12
Эта команда устанавливает размер шрифта во всем выделенном тексте в 12 пунктов. У объекта Selection (то есть выделенная в данный момент часть текста) есть подобъект Font — шрифт выделенного текста, а у подобъекта Font — свойство Size. Свойство Size тоже можно считать подобъектом. Знак "=" — это оператор присваивания, в данном случае свойству Size объекта Font объекта Selection присваивается значение 12 — размер шрифта во всем выделенном тексте устанавливается в 12 пунктов.
Если в документе ничего не выделено, то в 12 пунктов устанавливается размер текущего шрифта и следующая набранная буква будет именно такого размера. Если выделен графический объект, то команда будет ошибочной, о чем VBA выдаст соответствующее сообщение.
Кроме того, с помощью подобной команды можно получить информацию о текущем размере шрифта:
а = Selection.Font.Size
После ее выполнения переменная а будет иметь значение, равное размеру шрифта выделенного текста. Как видите, синтаксис команды подобен синтаксису предыдущей.
Если в документе ничего не выделено, то переменная а будет иметь значение размера шрифта следующего за курсором символа. Если разные части выделенного текста оформлены разными шрифтами, то переменная а будет иметь значение 9999999. Если выделен графический объект, то команда будет ошибочной, о чем VBA выдаст соответствующее сообщение.
With Selection.Font
.Name = "Times New Roman"
.Size = 12
.Colorlndex = wdBlack
End With
Похоже, это что-то, связанное со шрифтом. В самом деле, ведь "Font" по-английски значит "шрифт", a "Selection" — "выделение". По слову "Name" можно Заключить, что в этой команде устанавливается имя шрифта — "Times New Roman", а слово "Size", наверное, устанавливает его размер. " .Colorlndex = wdBlack" — выглядит как команда, устанавливающая цвет шрифта: есть слово "Color" "цвет" и есть слово "Black" — "черный". Но чтобы не гадать попусту, посмотрим справку VBA — поставим курсор на слово "Selection" и нажмем F1 (рис. 3.2).
Рис. 3.2.
Используя англо-русский словарь, можно узнать, выделенный текст или точку ввода текста. Посмотрим (рис. 3.3).
Рис. 3.3.
Что-то маловато информации. Ну, ясно, что шрифт, а как пишется команда, какие у нее могут быть еще параметры? Нажмем-ка на подчеркнутое слово "Font" в тексте — это выведет информацию об объекте "Font" (рис. 3.4).
Рис. 3.4.
Ну, теперь все ясно. Даже примеры приведены, — и очень похожие на наш макрос. Посмотрим тогда ссылку "Properties" вверху окна справки — список свойств шрифта, которые можно задать в программе (рис. 3.5).
Рис. 3.5.
Это, кстати, такой же список, как и тот, что выпадает в качестве контекстной подсказки, если при наборе текста программы вручную поставить после слова "Font" точку. Видно, что там есть все свойства шрифта, задаваемые в макросе: и "Name", и "Size", и "Colorlndex". Можно при желании почитать про каждое свойство подробно, но, наверное, лучше разобраться с командой "With", которая встречается и в нашем макросе, и в справке по слову "Font". Ставим на нее курсор и нажимаем F1 (рис. 3.6).
Рис. 3.6.
Даже на русском (некоторые разделы справки VBA переведены на русский язык). Ну и прекрасно — прочтя справку, узнаем, что "Инструкция With позволяет выполнить последовательность инструкций над указанным объектом, не повторяя задание имени объекта." То есть она позволяет сократить объем кода и облегчить ориентировку программиста в нем, — иначе, без этой функции, рассматриваемый фрагмент кода нашего макроса имел бы вид
Selection.Font.Name = "Times New Roman"
Selection.Font.Size = 12
Selection.Font.Colorlndex = wdBlack
что и выглядит некрасиво, и места больше требует. Примем к сведению.
Идем дальше:
With Selection.ParagraphFormat
.Leftlndent = CentimetersToPoints(0)
.Rightlndent = CentimetersToPoints(0)
.SpaceBefore = 0
.SpaceAfter = 0
.LineSpacingRule = wdLineSpaceSingle
.FirstLinelndent = CentimetersToPoints(1.27)
End With