Краткое знакомство с редактором Visual Basic
Первые обращения к редактору Visual Basic могут вас озадачить. Наверное, присутствие меню и панелей инструментов вверху экрана покажется вам привычным, но вот что означает это обилие окон? Предсказать их взаимное расположение практически невозможно, поскольку они размещаются и комбинируются почти в бесконечном разнообразии вариантов (даже когда вы открываете редактор Visual Basic впервые, все равно предстающая перед вами картина допускает немало вариантов, в зависимости от того, как вы его открыли).
Кроме того, если вы не профессиональный программист, названия окон и их функции окажутся для вас наверняка непонятными.
Научить вас уверенно обращаться со всеми этими окнами должна глава 5, здесь же я приведу только список их имен и функций (табл. 3.1).
Таблица 3.1. Имена и функции
Имя окна | Функциональное назначение |
Project Explorer (окно проводника проекта) | Перемещение по компонентам VBA-проекта и управление ими |
Code (окно программного кода) | Просмотр, добавление и редактирование программного кодаVBA |
UserForm (окно формы) | Проектирование пользовательских форм (диалоговых и других окон) |
Tool box (панель элементов управления) | Добавление элементов управления (текстовых полей или кнопок) в формы, а во многих VBA-приложениях и в документы |
Properties (окно свойств) | Установка индивидуальных атрибутов выделенной формы или элемента управления |
Watch (окно контролируемых выражений) | Отслеживание значений выбранных переменных программы и выражений |
Locals (окно локальных переменных) | Отслеживание значений переменных текущей процедуры |
Immediate (окно немедленного выполнения) | Выполнение отдельных строк программного кода для немедленного получения результата |
Object Browser (окно обозревателя объектов) | Исследование объектов, доступных программам |
Давайте поближе рассмотрим окно программного кола, предназначенное для печати и редактирования в нем VBA-кода, и окно пользовательской формы, предназначенное для визуального проектирования окон и форм. Примеры окон программного кода и пользовательской формы показаны на рис. 3.3 и 3.4 соответственно.
Рис. 3.3. В окнах программного кода, подобных этому, печатается программный код VBA
Рис. 3.4. Пример окна пользовательской формы с помещенным в него диалоговым окном на стадии еще не завершенного проектирования
С самого начала перед вами откроется несколько окон программного кода и окон пользовательской формы, а может случиться так, что их не будет на экране вообще. Но для нас это сейчас не имеет значения, поскольку после краткого обсуждения справочной системы VBA нам с вами понадобятся новые окна для программы-примера, которую вы почти готовы создать.
На помощь!
Практически все современные приложения до отказа забиты говорящими сами за себя пунктами меню, кнопками в панелях инструментов с красивыми маленькими пиктограммами, ясно соответствующими выполняемым кнопками командам, а также всплывающими сообщениями-подсказками, которые объясняют функциональное назначение этих кнопок. Кому еще при этом требуется какая-то справочная система? Например, вам, если вы собираетесь создавать VBA-программы.
Для начала вам потребуется справка о самом редакторе Visual Basic. Хотя меню и панели инструментов этого редактора работают точно так же, как и во всех остальных приложениях, поначалу многие из предлагаемых редактором команд выглядят совершенно непонятными.
Кроме того, редактор Visual Basic озадачивает вас сразу восемью-девятью типами окон, и требуется немало времени, чтобы разобраться с ними.
Ясно, что с пользовательским интерфейсом редактора Visual Basic вы разберетесь довольно скоро. Но даже самым опытным программистам требуется помощь, когда дело касается деталей самого языка VBA. Из-за сотен объектов, методов, ключевых слов и Бог знает, чего еще. что просто нельзя удержать в голове, без файлов справки VBA работа становится практически невозможной.
Существует созданная Microsoft бумажная версия руководства по программированию в VBA, но комплект поставки далеко не всякого VBA-приложения предполагает наличие печатной копии. Определенно можно сказать, что такая копия руководства есть в комплекте пакета Office для разработчика.
Скорая помощь VBA
Окна справки VBA выглядят по-разному в различных VBA-приложениях. Справочная система и старых программах использует старое и проверенное ядро WinHelp, своими истоками восходящее еще к Windows 3.11. Ядром же справки VBA 6 является HTML Help- новый стандарт Microsoft. Впервые представленная в Windows 98, система HTML Help больше похожа на Web-броузер. К сожалению, те версии HTML Help, которые я использовал до настоящего времени, ведут себя временами довольно странно и непредсказуемо, а кроме того, в них отсутствуют некоторые полезные возможности WinHelp, например возможность удерживать окно справки на экране перед другими окнами, когда активно другое приложение.
Чтобы открыть главное окно справки VBA, выберите Не1р=Справка по Microsoft Visual Basic - появится окно справки с описанием VBA в общем. Окно HTML Help для VBA 6 показано на рис. 3.5. К сожалению, здесь вы не найдете справки о работе с конкретным приложением.
Рис. 3,5. Пользователи VBA6 получают справку в окне HTML Help
Вызов справки VBA-приложения
Печально, но факт - редактор Visual Basic не предлагает команду, обеспечивающую непосредственный доступ к файлам справки того VBA-приложения. из которого он вызван. Не тратьте время на поиски - такой команды просто нет.
Если вам понадобится дополнительная информация о программировании в данном приложении, а не о VBA вообще, единственным решением будет следующий четырехшаговый процесс.
1. Откройте обозреватель объектов, нажав F2 или выбрав Вид=Обозреватель объектов (подробно обозреватель объектов рассмотрен в главе 6).
2. Из раскрывающегося списка в верхнем левом углу окна обозревателя объектов выберите имя вашего VBA-приложения.
3. Выделите любой раздел в панели классов в левой части окна обозревателя объектов.
4. Нажмите F1 или щелкните на кнопке с вопросительным знаком вверху окна обозревателя объектов, чтобы вызвать справочную систему.
При этом вы, конечно, увидите ту часть справки, которая относится к выделенному вами разделу в окне обозревателя объектов, но зато в окне справки можно воспользоваться вкладкой Содержание, на которой представлена вся справочная система вашего приложения.
Поиск в стоге справок
Работа справочной системы VBA организована в соответствии со стандартами Windows как в WinHelp, так и в HTML Help. В обоих случаях вы можете сделать следующее.
* Воспользоваться вкладкой Содержание, чтобы увидеть дерево разделов справки, подобное содержанию обычной книги.
* Воспользоваться вкладкой Предметный указатель, чтобы увидеть алфавитный список ключевых слов, предлагаемый создателями справки.
Можно также воспользоваться вкладкой Поиск, чтобы найти практически любое слово, встречающееся в файлах соответствующей справки. Следует, правда, заметить, что в справке VBA для Office вместо вкладки Поиск есть вкладка Мастер ответов. Предполагается, что вы можете теперь перейти к нужному разделу справки в ответ на целый введенный вами вопрос, но с тем же успехом вы можете просто ввести одно-два слова, а затем щелкнуть на кнопке Найти.
Контекстно-зависимая справка
В редакторе Visual Basic клавиша F1 вызывает контекстно-зависимую справку, т.е. открывает перед вами именно тот раздел справки, который соответствует работе, выполняемой вами в момент вызова. То, что вы увидите, зависит от типа окна, которое будет в редакторе при этом активным, а часто и от того, что именно вы делаете в этом окне.
Такая возможность оказывается действительно удобной при создании программного кода и проектировании форм. В окне программного кода клавиша F1 предоставит справку для термина, находящегося в точке ввода (точка ввода задается текстовым курсором - мигающей вертикальной линией, определяющей место появления печатаемых вами символов). Не волнуйтесь, если вы забыли, как используется какой-нибудь VBA-оператор. Например For . . . Next, или если не помните, какими свойствами и методами обладает нужный вам объект. Просто поместите текстовый курсор в соответствующий оператор и нажмите FI. Пример того, что вы можете при этом увидеть, показан на рис. 3.6.
Рис. 3.6. Получение справки для метода Add в Visio. Если присмотреться, можно заметить, что точка ввода в окне программного кода находится внутри ключевого слова Add
Подобным образом клавиша F1 предоставит вам самую подробную справку о проектировании форм. В окне пользовательской формы можно получить справку о каждом из помещенных в форму элементов управления (рискуя показаться назойливым, я напомню, что элементы управления - это кнопки, флажки, фреймы и т.п.). Щелкните на элементе управления, чтобы выделить его, а затем нажмите F1. Чтобы получить справку об определенном свойстве элемента управления, выделите этот элемент управления, щелкните в строке соответствующего свойства в окне свойств, а затем нажмите F1.
В других окнах клавиша F1 работает следующим образом.
* В окне проводника проекта и окне пользовательской формы нажатие клавиши F1 вызывает раздел справки с описанием окна. Для окна пользовательской формы это сработает, только если не выделен ни один из элементов управления.
* В окне контролируемых выражений, окне локальных переменных и в окне немедленного выполнения нажатие F1 вызывает окно справки со множеством предлагаемых в нем ссылок - подчеркнутых слов и словосочетаний, на которых надо щелкнуть, чтобы перейти к соответствующему разделу справки. Лично мне совершенно не понятно, почему сделано так, что для этих окон подходящий раздел справки не появляется автоматически.
* В окне обозревателя объектов при выделенных классе и члене класса нажатие F1 вызывает появление раздела справки, соответствующего выбранному объекту.
Что особенного в разделах справки VBA
При использовании справки VBA обращайте внимание на ссылки и кнопки ссылок, вызывающие другие относящиеся к рассматриваемому вопросу разделы справки. Научитесь пользоваться ими! Подобно разделу, показанному на рис. 3.7, большинство разделов справки VBA предлагают такую возможность. Если показанный раздел не содержит необходимой вам информации, вполне вероятно, что вы отыщете ее в разделах, предлагаемых ссылками.
Рис. 3.7. Подобно большинству других разделов, этот раздел справки VBA в Word предлагает ряд ссылок на другие разделы справки
В табл. 3.2 приведены некоторые из ссылок, которые вы можете увидеть в окне справки.
Таблица 3.2. Ссылки и кнопки ссылок
Ссылка или кнопка | Назначение |
See also (См. также) | Щелкните на этой ссылке, чтобы увидеть информацию о других разделах справки, относящихся к рассматриваемому вопросу |
Example (Пример) | Увидев кнопку или ссылку Example, без сомнения используйте ее. Примеры существенно помогают в понимании порой запутанных и неполных объяснений в файле справки. Кроме того, вы можете скопировать пример в свою VBA-программу и подправить его по своему усмотрению (врезка Позаимствуйте программный код из файла справки) |
Methods, Properties, Events (Методы, свойства и события) | Эти ссылки имеются в разделах справки, описывающих объекты. Позволяют ознакомиться с методами, свойствами и событиями, которые можно использовать с данным объектом |
Applies to (Применяется к...) | Эта ссылка присутствует тогда, когда раздел справки относится к свойству, методу или событию. Щелкните на ней, чтобы увидеть список объектов, с которыми свойство, метод или событие можно использовать |
Позаимствуйте программный КОД из файла справки
Не упустите возможность использовать фрагменты программного кода, предлагаемые во многих разделах справки VBA. Нередко программный код предлагаемого примера после самых минимальных изменений будет в точности соответствовать тому, что требуется вам. Чтобы использовать примеры справки, выделите нужные вам строки программного кода с помощью мыши, щелкните на выделенном правой кнопкой мыши и в появившемся меню выберите Копировать. После этого перейдите в окно программного кода в редакторе Visual Basic и щелкните на кнопке Вставить в панели инструментов или нажмите Ctrl+V.
Установка всех файлов справки
В зависимости от приложения и от того, как вы его инсталлировали, на вашем жестком диске установлен, а, может быть, и не установлен полный комплект файлов справки VBA. Из-за того, что любая серьезная работа в VBA без файлов справки практически невозможна, убедитесь в том, что все они установлены.
Например, программа установки Office устанавливает не все, а только некоторые файлы справочной системы VBA. Большинство пользователей при установке Office на свои компьютеры используют в программе установки кнопку Типичная. Это, конечно, очень удобно (зачем думать?), но при этом не устанавливается целый ряд важных файлов справки VBA.
Если так же действовали и вы, снова запустите программу установки и выберите опцию Выборочная. По очереди для каждого из приложений Office выберите пункты Справка и Файлы примеров. Когда вы затем щелкнете на кнопке Применить, появится диалоговое окно, подобное показанному на рис. 3.8. В этом окне отметьте флажок пункта Справка по Visual Basic.
Рис. 3.8 Чтобы установить справку VBA, отметьте флажок Справка для Visual Basic
В Office, даже если вы использовали при установке опции Выборочная или Полная, файлы справки VBA для Outlook все равно не устанавливаются на ваш жесткий диск. Чтобы установить справку VBA для Outlook, вам придется самим скопировать соответствующий файл справки из папки valupack\morehelp на компакт-диске Office в папку, куда установлен Office.
Создание VBA-Программы
Теперь, после знакомства с редактором Visual Basic и системой справки VBA, вы полностью готовы к своему первому походу к границам программирования. Я уже упоминал в главе 1, что процесс создания программы можно разделить на несколько этапов. В такой изысканной книге, как эта, я просто не могу себе позволить пожертвовать столь прекрасно упорядоченным подходом. Так что вам придется пройти весь курс строевой подготовки.
1-й шаг. Проектирование программы-примера
Поскольку мне не известно, с каким из VBA-приложений вы работаете, придется предложить вам в качестве примера нечто вполне типичное и, с другой стороны, потенциально полезное. Наша программа-пример должна будет открывать на экране новое окно с показанной в нем злободневной цитатой, а также датой и временем (я называю все это сообщением). Окно будет оставаться на экране до тех пор, пока пользователь не щелкнет на кнопке ОК.
Имея такое описание программы, вы можете без труда представить себе те элементы, из которых должна состоять программа.
* Очевидно, программа имеет одно окно, поэтому вам понадобится одна форма (UserForm).
* Для формы потребуются два элемента управления - надпись для сообщения и кнопка для команды ОК.
* Нужно будет также создать программный код для двух процедур: одной- для надписи, в которую нужно поместить сообщение, а другой - для выхода из программы, когда пользователь щелкнет на кнопке ОК.
Чего наша программа определенно не требует, так это отдельного модуля для ее VBA-кода (модуль - это отдельная единица программного кода, содержащая одну или несколько процедур; более подробно о модулях говорится в главе 6). Обе наши процедуры можно разместить в окне программного кода, ассоциированном с формой. В конце концов, ведь эти процедуры отвечают на события, которые происходят с формой.
Рассмотрим процедуру, отображающую сообщение и дату. Нам она не понадобится до тех пор, пока окно программы не появится на экране. В программе это произойдет, конечно, быстрее, чем вы глазом успеете моргнуть, но принцип остается - все равно эта процедура должна вызываться событием появления формы.
Процедура выхода из программы тоже вызывается событием, относящимся к форме, а именно - щелчком на кнопке ОК. Эту процедуру тоже можно разместить в окне программного кода формы.
Не забывайте, что у многих VBA-программ вообще нет своих окон. При создании такой программы вам непременно придется создать хотя бы один модуль, чтобы было куда поместить программный код.
2-й шаг. Реализация проекта
Теперь, когда план составлен, вы можете со всей серьезностью приступить к программированию. Возьмите в качестве отправной точки разработку внешнего вида формы, дополните ее небольшим, но тщательно выверенным фрагментом программного кода, и вы вправе надеяться в результате на небольшой VBA-шедевр.
Первым делом в редакторе Visual Basic создайте новую, чистенькую форму, которая послужит окном программы. Из меню редактора Visual Basic выберите InsertsUserForm, чтобы поместить новую форму на свой экран.
Видите, как легко это делается? На заре программирования для Windows приходилось вручную выписывать длинные и довольно сложные операторы даже для таких простых вещей, как помещение на экран обычного чистого окна.
Как видно из рис. 3.9, новая пользовательская форма представляет собой невыразительную серую панель. Обратите внимание, вы можете изменять размеры формы, перетаскивая маленькие белые квадратики, примыкающие к правому и нижнему краям формы (эти квадратики называются маркерами изменения размеров). Окно для нашей программы должно быть немного шире (чтобы в нем поместилось все сообщение одной строкой) и немного ниже (одна строка текста и одна кнопка не займут много места).
Рис. 3.9. Только что созданная форма в поисках цели своего существования
Значительно интереснее будет панель элементов управления (рис. 3.10), представляющая собой небольшое окно с набором пиктограмм, которое возникает на экране при работе с формой.
Рис. 3.10. Панель элементов управления VBA с пиктограммами элементов управления, которые вы можете поместить в свою форму
Теперь вы можете несколько оживить форму, добавив в нее пару элементов управления.
Начнем, пожалуй, с элемента управления надписью, который просто отображает текст. Во время выполнения программы элемент управления надписью отображает текст, который пользователь видит, но изменить не может.
Но ваша программа это может. Нашей с вами программе-примеру это просто необходимо, так как ей придется отображать дату и время, которые зависят от того, когда выполняется программа.
Чтобы поместить надпись в свою новую пользовательскую форму, выполните следующее.
1. Убедитесь, что форма активна, щелкнув на ней.
Панель элементов управления видна только тогда, когда форма активна.
2. Щелкните на пиктограмме с буквой А в панели элементов управления.
3. Поместите указатель мыши в форму, ближе к левому верхнему краю, и, нажав левую кнопку мыши, перетащите указатель вправо вниз, чтобы появившийся при этом прямоугольник вместил нужное сообщение (используйте рис. 3.11 в качестве руководства).
Рис. 3.11. После помещения в форму элемента управления надписью она должна выглядеть приблизительно так
Каждой новой надписи VBA автоматически приписывает заголовок, поэтому в прямоугольной рамке, ограничивающей наш элемент управления надписью, вы увидите величественный текст Label1. Ясно, что это не тот текст, который нам нужен. Чтобы удалить автоматически созданный текст надписи, придется обратиться к окну свойств.