Глава 2. Основы языка Visual Basic for Applications
Для полного описания возможностей VBA потребовалось бы несколько толстых книг. Поэтому я не буду описывать все команды VBA, рассказывать об их формате и требуемых параметрах — про это очень подробно рассказано в справке, да и средства подсказки тоже не дадут ошибиться. Если необходимо узнать, какая команда позволяет программно реализовать ту или иную возможность Word, то можно воспользоваться средством записи макросов, а потом почитать в справке о каждой записанной команде.
Однако в VBA есть некоторые вещи, о которых в справке упоминается не на первом плане, и человеку, незнакомому с программированием, трудно узнать о них. Поэтому в этой главе вы найдете описания лишь некоторых команд, которые нельзя записать средством записи макросов, а также некоторую информацию о неочевидных возможностях VBA.
События, методы, свойства
Когда-то давным-давно программы, написанные и работавшие тогда еще под MS-DOS, получали от пользователя данные, обрабатывали их и выдавали затем результат. Почти любая программа предусматривала в своей работе период ввода данных, период обработки, период выдачи результата. Подобные действия были принципом работы Dos-овских программ. И программирование их называлось структурным — надо было строго и последовательно разрабатывать алгоритм, реализовывать заданный порядок действий программы, в который в процессе работы пользователь в момент, для этого не предназначенный, вмешаться не мог, разве только принудительно остановив программу.
С появлением операционной системы Windows стал широко известен другой принцип программирования и создания алгоритмических языков — принцип объектно-ориентированного языка.
Это значит, что основная направленность разработчика сместилась с
Объект — это все, над чем может совершаться какое-либо действие или то, что имеет определенные характеристики. К примеру, открытый документ Word — это объект, первая буква в нем — это тоже объект, тридцатое слово, десятое предложение, второй рисунок — это все объекты. Объектами также являются запущенная программа, какой-нибудь файл на диске, даже сам Word — это тоже объект.
Почти каждый объект внутри себя имеет подобъекты, которые, в свою очередь, являются полноценными объектами и могут иметь свои подобъекты. Например, у объекта «Документ» есть подобъект 'Десятое предложение', у которого есть подобъект 'Второе слово', у которого есть подобъект 'Третья буква'. С помощью объектно-ориентированного языка VBA можно обратиться к любому объекту, если знать его иерархию — то есть все те объекты, чьим подобъектом он является.
Свойство — это любая характеристика объекта. К примеру, у объекта — первой буквы документа есть свойства: выделение жирным, выделение цветом, подчеркивание, выделение курсивом, регистр и много еще других. У объекта — документа есть свойства: наличие автоматической расстановки переносов, наличие автоматической проверки грамматики и др.
Большинство свойств объектов VBA можно задавать программно, однако есть свойства Read-Only — не допускающие изменений.
Многие свойства объектов Word также задаются через стандартные диалоговые окна Word — например, Файл-Параметры страницы или Сервис-Параметры, однако их всегда можно задать и в программе, а соответствующие диалоговые окна использовать при записи макроса для того, чтобы посмотреть синтаксис команды задания того или иного свойства.
Метод — это какое-либо действие над объектом. Например, печать текста или поиск текста в документе. У многих методов есть параметры метода, позволяющие задать параметры действия. Вот пример:
With Selection.Find
Text = 'Этот текст надо заменить'
Replacement.Text = 'Заменить на этот текст'
Forward = True
Wrap = wdFindContinue
Format = False
MatchCase = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
В данном примере вначале объекту VBA «Find», являющемуся подобъектом объекта «Selection», задаются необходимые свойства'.Text', '.Forward', '.Format' и другие. Затем выполняется метод'.Execute' для объекта 'Selection.Find' с параметром 'Replace:=wdReplaceAll'(т. е. 'Заменить все'). Команда With … End With позволяет не писать для каждого свойства или подобъекта полное название соответствующего объекта, что дает возможность экономить место и делать программу лучше и быстрее работающей.
Свойства и методы по-разному отображаются в контекстной подсказке. Так, против названий свойств стоит серый символ указывающей руки, а против названий методов — зеленый значок летящей коробки (см. на рис. 1.8 в предыдущей главе).
Событие — это то, что 'происходит с объектом помимо его воли', 'результат действия какого-то другого метода'. Это 'все, что случается' с объектами по милости пользователя или программы. Нажатие кнопки, набор буквы, клик мыши, наступление какого-либо момента времени, завершение работы любой другой программы, — все это события.
События — основа работы любой программы. И даже если программа должна работать автономно (например, планировщик заданий), то в качестве событий используется наступление того или иного времени на системных часах. Так, когда пользователь нажимает кнопку на форме, происходит событие нажатия этой кнопки.
Для каждого события можно написать программу, которая будет срабатывать именно тогда, когда это событие произойдет. Особое значение понятие событий имеет при написании программы реакций формы на изменения ее компонентов, а также при описании новых классов.
На каждое событие пишется своя подпрограмма, которая это событие «обрабатывает» — то есть выполняет определенные действия, которые должны быть выполнены, когда это событие происходит.
Типы данных и объявление переменных
Все переменные в программе на VBA могут содержать какую-нибудь информацию: текст, число, утверждение истинности и др. В зависимости от вида содержимого они подразделяются на типы данных, — соответственно текстовые, числовые, булевые (то есть принимающие значения «да» или «нет», соответственно по-английски «True» или 'False'). В VBA определено большое количество различных типов данных, которые может содержать переменная. Вы можете получить информацию о всех возможных типах данных VBA из Справки, найдя в Предметном указателе раздел 'Типы Данных' (рис. 2.1).
Так, переменная типа Integer — это целое число -32 768 до 32 767, а переменная типа String — это строка текста длиной до двух миллионов символов.
Рис. 2.1.