VBA в MS Office 2007

VBA-редактор

Показывать лекцию целиком

3.1. Особенности главного меню VBA-редактора

Окно редактора Visual Basic выглядит одинаково во всех приложениях Microsoft Office. Давайте рассмотрим главное меню этого окна, описав назначение наиболее часто используемых пунктов.

  • File (Файл) — служит для работы с файлами.
  • File • Save — сохраняет файл.
  • File • Import File — позволяет импортировать внешний файл в редактор. Например, таким образом можно добавить в свой проект модуль (то есть — программный код) или форму.
  • File • Export File — экспортирует данные из редактора во внешний файл. Например, этой командой можно сохранить редактируемую форму и передать ее другому разработчику.
  • File • Close and Return To Microsoft Word — закрывает VBA-редактор и возвращается в Microsoft Word (аналогичная команда есть и для MS Excel). Вы можете просто переключаться между редактором и основным приложением в Панели задач Windows, не закрывая редактор.
  • Edit (Правка) — содержит команды для правки. Помимо стандартных команд отмены и возврата последнего действия ( Undo, Redo ), вырезания, копирования, вставки ( Cut, Copy, Insert ), поиска ( Find ), это меню содержит несколько особенных команд. В частности, это List Properties/Methods (Список Свойств/Методов) и другие.
  • View (Вид) — cодержит команды для отображения различных окон редактора. Названия команд соответствуют названиям окон.
  • Insert (Вставка) — служит для вставки в проект форм ( Insert • User Form ), модулей ( Insert • Module ), процедур ( Insert • Procedure ), файлов ( Insert • File ) и модулей класса ( Insert • Class Module ). Чаще всего вам придется вставлять в проект формы. Эти команды продублированы на панели инструментов редактора.
  • Format (Форматирование) — служит для управления расположением элементов управления на формах.
  • Debug (Отладка) — содержит команды, позволяющие отлаживать программы.
  • Run (Запуск) — содержит команды для управления выполнением программ. В частности, команда Run • Sub/User Form (Запуск • Процедура/Форма) запускает на выполнение активную процедуру или форму (рядом с этой командой стоит характерный зеленый треугольник). Команда Run • Break (Запуск • Приостановить) — приостанавливает выполнение программы, команда Run • Reset (Запуск • Перезапуск) – останавливает выполнение программы. Эти команды продублированы на панели инструментов редактора в виде кнопок с соответствующими пиктограммами.
  • Tools (Инструменты) — содержит средства для настройки свойств редактора, подключения дополнительных библиотек объектов.
  • Add-Ins (Дополнения) — позволяет управлять дополнениями. По умолчанию это меню содержит лишь одну команду, запускающую менеджер дополнений.
  • Window (Окно) — стандартные команды для работы с окнами.
  • Help (Помощь) — помощь по VBA.
  • В дальшейнем мы подробно рассмотрим многие из команд главного меню. А сейчас давайте поговорим об окне Project — вам постоянно придется пользоваться им.

    3.2. Подробности об окне Project

    Окно Project служит для навигации по проекту (рис. 3.1.).

    (рис 3.1) Окно Project

    Каждый открытый документ представляет собой отдельный проект. На рис. 3.1. вы можете видеть окно Project для только что созданного документа MS Word. В проект добавлена форма.

    Проект имеет иерархическую структуру. Так, в разделе Microsoft Word Objects (Объекты Microsoft Word) мы можем видеть объект ThisDocument (Этот документ), то есть документ, который мы создали. В разделе Forms (Формы) мы можем видеть объект UserForm1 — только что вставленную в проект форму.

    Чтобы отобразить объект, достаточно сделать по нему двойной щелчок или нажать на кнопку View Object (вторая слева в верхней части окна Project ). Чтобы просмотреть код объекта надо нажать на кнопку View Code (крайняя левая кнопка).

    Щелкнув правой кнопкой мыши по названию проекта, можно увидеть его контекстное меню. Это меню содержит наиболее часто используемые команды для работы с проектами. В частности, особый интерес представляет команда Project Properties (Свойства проекта).

    В окне Project Properties обратите внимание на вкладку Protection (Защита). Она позволяет защитить проект от просмотра и закрыть его паролем.

    Для защиты проекта от просмотра установите галочку в поле Lock project for viewing (Закрыть проект от просмотра), для закрытия проекта паролем, введите в поля Password (Пароль) и Confirm password (Подтвердить пароль) пароль.

    Существует специальное ПО, которое позволяет восстанавливать забытые пароли к VBA-проектам. Как вы понимаете, оно может помочь получить доступ в проект не только законным владельцам, но и злоумышленникам. Поэтому если вы, например, передаете кому-то ценный VBA-проект по слабо защищенным каналам связи — лучше зашифруйте весь файл с помощью какой-нибудь программы шифрования.

    Еще одна полезная возможность, связанная с управлением проектами – подписывание проектов.

    Прежде чем подписать проект, нужно создать цифровой сертификат для проектов VBA. Чтобы создать его, пройдите по пути Пуск • Все программы • Microsoft Office • Microsoft Office Tools • Digital Certificate for VBA Projects. Введите в появившемся окне имя для сертификата.

    Чтобы теперь подписать проект, выделите его в окне Project и воспользуйтесь командой Tools • Digital Signature. В появившемся окне нажмите на кнопку Выбрать — появится окно для выбора сертификата. Выберите из этого окна интересующий вас сертификат. В нашем случае здесь присутствует лишь один, заранее созданный, сертификат. Вот как выглядит окно цифровой подписи после завершения выбора (рис. 3.2.)

    (рис 3.2) Цифровая подпись проектов

    Учтите, что автоматически создаваемый сертификат считается надежным лишь на том компьютере, в хранилище сертификатов которого он находится. Если вы подпишите свои проекты, вы сможете один раз разрешить их использование, выбрав соответствующий пункт в окне настройки безопасности макросов.

    Это позволит, с одной стороны, не отвлекаться на постоянные запросы системы безопасности, а с другой — не понижать безопасность системы, разрешая выполнение всех макросов.

    Теперь займемся работой с формами и элементами управления

    3.3. Формы и элементы управления

    03-01-Формы и элементы управления.docm — пример п. 3.3. — 3.6

    Создайте новый документ Microsoft Word и откройте редактор VBA. Вставьте в проект новую форму командой Insert • User Form (Вставка • Форма). Вот что должно получиться (рис. 3.3.).

    (рис 3.3) Новая форма в окне редактора VBA

    Как видите, форма — это пустая заготовка будущего диалогового окна вашего приложения.

    По краям новой формы вы можете видеть маркеры выделения. С их помощью можно настраивать ее размеры.

    Обратите внимание на окно Properties (Свойства). Как вы уже знаете, оно содержит свойства объектов. Для выбора объекта, свойства которого будут отображены в этом окне, нужно либо выделить объект, либо указать его в списке, который находится в верхней части окна Properties.

    Окно Toolbox (Элементы управления) содержит элементы управления, которые можно добавлять на форму. Элементы управления — это все то, что служит для управления работой программ. Например: кнопки, поля ввода, полосы прокрутки и так далее.

    Для того, чтобы добавить элемент управления на форму, нажмите в окне Toolbox кнопку с изображением этого элемента и выделите мышью ту область на форме, которую он должен занять

    Нажмем на кнопку Toolbox'а с изображением кнопки и добавим новую кнопку на форму. Вот, что у нас получилось (рис. 3.4.).

    (рис 3.4) Кнопка, добавленная на форму

    Вокруг кнопки вы можете видеть маркеры выделения, которые служат для изменения ее размера. "Схватив" элемент управления мышью, вы можете перемещать его по форме.

    3.4. Окно Properties — управление свойствами

    Выделите кнопку и посмотрите на окно Properties. Теперь в нем отображаются ее свойства.

    Свойства элементов управления могут быть отображены в двух разных представлениях. Первое – это алфавитный список (вкладка Alphabetic ) второе – отображение по категориям ( Categorized ). Начинающим обычно удобнее пользоваться видом свойств объекта по категориям (рис. 3.5.). Объединение сходных свойств в группы позволяет легче разбираться с их предназначением.

    (рис 3.5) Вид свойств кнопки по категориям

    На вкладке Categorized свойства объектов объединены в группы. Для удобства группы можно сворачивать и разворачивать. Давайте рассмотрим особенности различных групп, отображаемых в этом окне.

  • Appearance (Внешний вид) — отвечает за отображение объекта, за надписи на нем, за его имя.
  • Behavior (Поведение) — отвечает за поведение объекта. Например, за отображение многострочного текста.
  • Font (Шрифт) — содержит свойство, отвечающее за шрифт, которым сделаны надписи на объекте.
  • Misc (Разное) — различные настройки. Например — настройки указателя мыши, когда он будет находиться над объектом.
  • Picture (Изображение) — информация об изображении, которое может отображаться на объекте.
  • Position (Расположение) — определяет размер и положение объекта.
  • У форм есть группа свойств Scrolling (Скроллинг) — свойства этой группы управляют прокруткой формы.

    Давайте рассмотрим свойства, общие для практически всех объектов — форм, различных элементов управления.

    3.5. Важнейшие свойства элементов управления

    Name (Имя) — очень важное свойство. По имени к объекту можно обратиться из программного кода.

    Желательно давать объектам осмысленные имена — так гораздо легче пользоваться ими при разработке программ. Следите за тем, чтобы имена ваших объектов состояли лишь из цифр, латинских букв, символов подчеркивания. Если вы дадите объекту имя, например, содержащее знак "/", редактор не позволит использовать такое имя. При именовании объектов можно пользоваться и русскими буквами, но лучше этого не делать.

    Переименуем форму в frm_Main, а кнопку – в cmd_First. Один из стилей именования объектов (так называемая венгерская нотация) заключается в использовании префикса, указывающего на тип объекта.

    В табл. 3.1. вы можете найти префиксы, которые можно использовать при именовании различных элементов управления.

    Префиксы имен элементов управления
    Элемент управления Префикс
    UserForm (Форма) frm
    CommandButton (Кнопка) cmd
    TextBox (Текстовое поле) txt
    Label (Надпись) lbl
    ListBox (Список) lst
    ComboBox (Поле со списком) cbo
    ScrollBar (Полоса прокрутки) scr
    SpinButton (Счетчик) spn
    OptionButton (Радиокнопка) opt
    CheckBox (Флажок) chk
    ToggleButton (Выключатель) tgl
    Frame (Рамка) fra
    Image (Картинка) img
    MultiPage (Набор страниц) mlt
    TabStrip (Набор вкладок) tab

    Вы можете использовать свой собственный стиль именования, главное — это чтобы имена были понятными и сразу указывали на назначение объекта.

    Caption (Надпись) — определяет надпись, которая видна на элементе управления. Изменим свойство Caption для объекта frm_Main на "Моя первая программа", а для объекта cmd_First — "Нажми меня!".

    Width (Ширина), Height (Высота) — определяют ширину и высоту объекта, которые измеряются в пикселях.

    Font (Шрифт) — при попытке редактирования этого свойства открывается окно настройки параметров шрифта, в котором можно выбрать гарнитуру, размер, начертание шрифта.

    ForeColor (Цвет шрифта) — задает цвет шрифта элемента управления.

    BackColor (Цвет фона) — позволяет задать цвет фона элемента управления.

    У кнопок и других элементов управления есть специфические свойства. В их число входят:

    Top (Расстояние от верха формы), Left (Расстояние от левого края формы) — задают положение элемента на форме.

    Visible (Видимость) — может принимать значения True (Истина) — то есть объект будет видимым, и False (Ложь) — объект будет невидимым.

    Enable (Включено) — если это свойство установлено в True (Истина) — объектом можно пользоваться. Если в False (Ложь) — объект будет неактивен. Например, кнопку "Далее" можно сделать неактивной до тех пор, пока пользователь не заполнит все обязательные поля ввода данных.

    Некоторых других свойств объектов мы коснемся в дальнейшем.

    Продолжим знакомство с элементами управления. Сейчас нас интересует элемент управления Label (Метка). Метки используются для размещения текстовой информации на формах. Добавьте в вашу форму новую метку (если сомневаетесь в названии элемента управления — наведите на него указатель мыши в панели инструментов — через некоторое время появится подсказка), дайте ей имя lbl_First и разместите на ней надпись "Добро пожаловать в мою первую программу!". Чтобы разместить такую надпись на метке, можно модифицировать ее свойство Caption. Но можно поступить по-другому — выделить элемент управления и щелкнуть в том его месте, где расположен текст и отредактировать его прямо на элементе управления.

    Мы еще не написали ни единой строчки кода, но уже можем запустить нашу первую программу. Щелкните по созданной форме и нажмите зеленую кнопку на панели инструментов редактора VBA (или выберите команду меню Run • Sub/User Form, можете вместо всего этого просто нажать клавишу F5 ).

    В результате вы увидите только что созданную форму во всей красе (рис. 3.6.).

    (рис 3.6) Запущенная форма программы

    Если вы попробуете нажать на кнопку "Нажми меня!" — ничего не произойдет. Это неудивительно — мы ведь ничего не делали с кнопкой. Пора это исправить. Чтобы снова вернуться в редактор, закройте форму с помощью красной кнопки с крестом, расположенной в правой верхней части ее окна.

    Дважды щелкните мышью по кнопке cmd_First. Откроется редактор кода. В нем будет автоматически создан каркас процедуры обработчика события Click для кнопки. Об этом читайте дальше.

    3.6. Обработчики событий и подробности о редактировании кода

    Программы на VBA управляются событиями. Обработчик — это подпрограмма, которая будет выполняться если произойдет соответствующее ей событие.

    На рис. 3.7. вы можете видеть окно редактора кода с открытым в нем пустым обработчиком.

    (рис 3.7) Окно Code с обработчиком события нажатия на кнопку

    Обратите внимание на первую строчку кода

    Private Sub cmd_First_Click()

    означает, что эта процедура будет выполнена при щелчке ( Click ) по кнопке с именем cmd_First. Ключевое слово Private называется модификатором доступности. Оно означает, что данная процедура недоступна для вызова из внешних модулей. Вам не придется настраивать модификаторы доступности вручную — по крайней мере, на данном этапе знакомства с VBA. Так же вам совсем необязательно запоминать тонкости правильного написания заголовков процедур обработчиков событий. Обычно они создаются автоматически.

    У элементов управления существует обработчик события, назначаемый по умолчанию, то есть – при двойном щелчке. Обработчики других событий можно настроить в окне редактора кода.

    Обратите внимание на верхнюю часть окна редактора кода. В левой ее части расположено поле со списком, в котором видна надпись cmd_First. Если щелкнуть по кнопке с треугольником, которая расположена рядом с этим полем, откроется список, содержащий имена всех элементов управления, расположенных на форме. Также в списке представлена и сама форма, у которой тоже есть свои события, — это строка UserForm. Имя формы в этом списке не применяется, но оно нужно для доступа к форме из внешних программ, например — макросов, обработчиков событий других форм.

    В правой части окна расположен список событий.

    Чтобы создать процедуру обработчика события для элемента управления или формы, выберите нужный элемент управления в левом поле, а в правом — название события. Каждый элемент управления имеет уникальный набор событий, однако, в них не слишком сложно ориентироваться. На практике чаще всего используется лишь некоторые из них. Обычно события имеют осмысленные англоязычные названия, по которым можно догадаться об их предназначении.

    Теперь попытаемся вставить какие-нибудь команды в обработчик события. Пусть это будут строка комментария (она начинается с апострофа), поясняющая работу программы, и команда вывода сообщения.

    Строки кода внутри программных конструкций принято писать с отступом. Это облегчает восприятие программы. Длинные строки можно разрывать на более короткие, ставя в конце этих строк знак "_".

    Для удобства можно разбивать различные блоки программы пустыми строками.

    Иногда при работе в редакторе кода удобно разделить окно на две части. Для этого служит горизонтальная полоска, расположенная в правой части окна, около верхней кнопки полосы прокрутки. Разделив окно, вы можете редактировать один участок кода, сверяясь с другим участком.

    В левом нижнем углу окна редактора расположена пара кнопок. По умолчанию нажата кнопка Full Module View (Просмотр модуля целиком) то есть в окне редактора отображается код модуля целиком — со всеми процедурами и обработчиками событий. Если вы заняты редактированием какого-то одного модуля и не хотите отвлекаться на остальные — нажмите на кнопку Procedure View (Просмотр процедуры), которая скроет все процедуры кроме процедуры, код которой вы редактируете в настоящий момент.

    Для вывода сообщений в VBA есть встроенная команда MsgBox.

    Говоря о встроенных командах, часто используют слова "процедуры" и "функции". Главное отличие процедуры от функции – то, что функция возвращает в точку вызова какие-то значения, а процедура — нет. Однако, MsgBox может работать и как функция, и как процедура, поэтому и то и другое наименование будет правомерным.

    Как и многие другие команды, она имеет множество параметров. Но вам совсем необязательно помнить их, обращаясь к MsgBox. Дело в том, что редактор кода снабжен очень удобной системой подсказок. Так же редактор может автоматически завершать команды ( Edit • Complete Word ).

    Начните вводить в редакторе текст msgbox( (рис. 3.8.) причем именно строчными буквами. Если в итоге все будет введено верно, редактор автоматически преобразует msgbox в MsgBox. Если этого не произошло — возможно, вы допустили ошибку при написании имени команды. Итак, при правильном вводе команды, редактор распознает ее и предложит контекстную подсказку.

    В контекстной подсказке по MsgBox можно почерпнуть информацию о структуре вызова этой функции, о тех параметрах, которые ей можно передать. Параметры — это те данные, с которыми будет работать функция. Например, мы передаем MsgBox строку для вывода в окне сообщения. В контекстной подсказке по MsgBox эта строка называется Prompt (Приглашение). Она выделена жирным шрифтом – это значит, то, что будет сейчас введено, воспримется как Prompt — то есть как текст, который будет выведен в окне сообщения. Текст, который вы передаете функции, должен быть заключен в кавычки.

    Если поставить после введенного текста запятую, в контекстной подсказке жирным выделится следующий параметр. Если вы хотите оставить этот параметр в значении по умолчанию, ставьте еще одну запятую, и сможете ввести значение для очередного параметра и т.д.

    (рис 3.8) Ввод команды в окно редактора

    При вызове процедур и функций им можно передавать параметры в таком виде:

    MsgBox Prompt:="Привет!"

    Здесь мы присвоили параметру Prompt значение "Привет", то есть наше окно должно вывести сообщение "Привет". Такой подход очень удобно использовать при вызове команд, принимающих множество параметров.

    Мы не будем вводить другие параметры для окна сообщения — ограничимся только текстом и завершим ввод. Вот, что у нас получилось (рис. 3.9.).

    (рис 3.9) Код обработчика события, выводящий окно сообщения

    В итоге, код обработчика события будет выглядеть так (Листинг 3.1.):

    'Вывод сообщения
    MsgBox ("Здравствуйте! Я ваша первая программа на VBA")

    Запустим форму на выполнение и нажмем на кнопку — появится окно с сообщением (рис. 3.10.).

    (рис 3.10) Сообщение, появляющееся при нажатии на кнопку

    Теперь поговорим об использовании свойств элементов управления в программном коде.

    3.7. Свойства и методы элементов управления в программах

    03-02-Свойства элемента управления.docm — пример к п 3.7.

    Вы уже знаете, что настраивать элементы управления можно вручную изменяя их свойства в окне Properties. А что если поменять свойство прямо в программном коде? Давайте попробуем.

    Вернемся к нашему примеру. Модифицируем код обработчика события Click для кнопки cmd_First таким образом, чтобы при нажатии на эту кнопку изменялся бы текст, который выводит надпись lbl_First.

    Текст надписи задается при помощи свойства Caption. Выше мы уже обсуждали теорию работы с объектами, а теперь пришло время практики.

    Чтобы изменить свойство Caption надписи из кода, используется такая конструкция:

    lbl_First.Caption = "Текст"

    Введите в обработчик события нажатия на кнопку имя элемента управления lbl_First. Поставьте после него точку. Если вы набрали имя правильно, редактор предложит список свойств и методов, доступных данному элементу управления (рис. 3.11.).

    (рис 3.11) Подсказка о свойствах и методах объекта в редакторе кода

    Вы можете ввести первые буквы нужного свойства или метода, редактор автоматически найдет его в списке. Для окончания ввода вам будет достаточно нажать клавишу Enter. Так же вы можете, воспользовавшись полосой прокрутки, найти свойство или метод вручную и, сделав по его наименованию двойной щелчок (или, опять же, нажав Enter ) завершить ввод.

    После того, как lbl_First.Caption введено, наберите знак = и, в кавычках — текст, который должен быть присвоен параметру Caption. В результате окно редактора кода должно выглядеть так (рис. 3.12.)

    (рис 3.12) Присвоение нового значения свойству элемента управления

    lbl_First.Caption = "Надпись изменена"

    Теперь если вы запустите форму и нажмете на кнопку, текст надписи будет изменен.

    Аналогично, мы можем считывать значения из свойств элементов управления и использовать их в программах. Например, напишем код, выводящий текст, который записан в свойстве Caption элемента управления lbl_First, в окне сообщения. Для этого добавим на форму еще одну кнопку, назовем ее cmd_Second и добавим в ее обработчик события Click такой код:

    MsgBox (lbl_First.Caption)

    Чтобы понять этот код, достаточно попытаться "перевести" его на обычный человеческий язык. Получится примерно следующее: "Отобразить в окне сообщения текст, который содержится в свойстве Caption объекта lbl_First ". Или, еще проще: "Отобразить в окне сообщения то, что написано на элементе управления lbl_First ". Вот, как выглядит результат работы (рис. 3.13.).

    (рис 3.13) Чтение значений из свойств элементов управления

    Элементы управления имеют свойства по умолчанию, обращение к которым возможно и без уточняющего оператора. Например, у надписи это свойство Caption. Значит, два нижеприведенных фрагмента кода для надписи lbl_First приводят к идентичным результатам:

    lbl_First.Caption = "Новая надпись"
    lbl_First = "Новая надпись"

    3.8. Выводы

    В этой лекции мы познакомились с VBA-редактором и основными приемами работы с элементами управления. В следующей мы обсудим некоторые подробности, касающиеся использования других элементов управления, рассмотрим приемы работы с ними.

    Вернуться к учебному плану