Простейшие усовершенствования макросов
В этой главе не предполагается подробно рассматривать приемы редактирования макросов в редакторе Visual Basic. В конце концов, это те же самые приемы, которые используются при создании любых VBA-программ и которые, в основном, обсуждаются в этой книге.
Все же я считаю целесообразным предложить здесь несколько простых и обычно полезных способов усовершенствования макросов. Предлагаемые идеи требуют минимальных программистских усилий, но позволяют сделать макрос более гибким. Попробуйте следующее.
Рис.2.6. Запись макроса завершена, и перед вами - его программный код, созданный генератором средства записи макросов
Организуйте повторение команд в макросе. Возможно, вам известно наперед, что придется выполнить целую последовательность команд (или какую-то одну команду) ровно 11 раз. В этом случае все, что вам нужно, - это добавить в свой программный код цикл For. . .Next. Вы спрашиваете, что такое цикл For . . . Next? Это один из элементов языка программирования VBA, обсуждать которые я собираюсь в главе 8.
Организуйте повторение команд в макросе с выяснением количества необходимых повторений непосредственно во время работы макроса. Если вы достаточно амбициозны, добавьте в свой макрос сразу и цикл For. . .Next, и функцию InputBox. Последняя выводит на экран диалоговое окно, предлагающее ответить на некоторый вопрос, в данном случае - о количестве повторений. Использование InputBox обсуждается в главе 11.
Добавьте при вызове возможность выбора текста для использования макросом.
Макрос, который всегда вставляет в документ один и тот же текст, не слишком гибок.
Добавив в записанный макрос функцию InputBox, вы сможете сообщать при каждом запуске макроса, какой текст нужно вставить. Снова напомню, что подробности об использовании InputBox вы найдете в главе 11.
Добавьте возможность выбора перед запуском макроса. Довольно часто для правильной работы макроса требуется выбрать текстовый, графический или какой-то другой объект. Структура If. . . End If языка VBA позволяет проверить, выбран ли объект подходящего типа, чтобы иметь возможность отменить работу макроса в случае невыполнения каких-либо условий. Все тонкости использования оператора If... End If обсуждаются в главе 8.
Как только вы осознаете привлекательность использования средства записи макросов в совокупности с самыми минимальными усилиями по добавлению VBA-кода, вас непременно привлечет и программирование. После этого ваше превращение в компетентного VBA-программиста станет только вопросом времени и не потребует слишком большим усилий.
Глава 3. Основы программирования на VBA.
В этой главе ...
~ Запуск редактора Visual Basic
~ Использование справочной системы VBA
~ Программирование в VBA - краткое и нестрогое руководство
Макросы хороши до определенных пределов, но гораздо больше можно получить от полноценных VBA-программ. Эта глава послужит аварийным введением в рациональное VBA-программирование. После вводного обзора редактора Visual Basic и справочной системы VBA мы с вами на простом примере разберем по шагам процесс построения VBA-программы. Эти знания станут тем солидным базисом, который потребуется для освоения всего остального материала книги.
Вызов редактора Visual Basic
Редактор Visual Basic служит командным центром для работы в VBA. В нем вы должны находиться при разработке VBA-форм, создании VBA-кода, тестировании и отладке VBA программ. Экспертом по использованию редактора Visual Basic вы станете после прочтения главы 5, а пока вам нужно только знать, как вытянуть этот редактор на экран.
Если вы делали кое-что из того, о чем так много говорилось в предыдущей главе при обсуждении программного кода, создаваемого средством записи макросов, вы должны уже знать один из способов вызова редактора Visual Basic- выбор макроса в диалоговом окне
Макрос с последующим щелчком на кнопке Изменить. Но, конечно же, можно запустить редактор Visual Basic и непосредственно. В большинстве VBA-приложений можно воспользоваться одним из следующих методов.
* Выбрать из меню Сервис=Макрос=Редактор Visual Basic.
* Нажать Alt+Fll. Вы услышите, как затараторит жесткий диск, и через несколько мгновений на экране появится редактор Visual Basic. Он должен хотя бы отдаленно напоминать то, что изображено на рис. 3.1.
В некоторых приложениях вам понадобится проделать другой маршрут, чтобы добраться до редактора Visual Basic. Однако вы в любом случае найдете необходимую команду где-нибудь в меню Tools (Сервис).
Вызов редактора Visual Basic одним щелчком
Если в вашем приложении есть кнопка в панели инструментов для вызова редактора Visual Basic. используйте се. В VBА-приложениях из пакета Microsoft Office (Word. Excel и PowerPoint) эта кнопка помещена в панель инструментов Visual Basic (рис. 3.2). Наборы кнопок в этой панели инструментов у разных приложений могут немного отличаться.
Рис. 3.1. Редактор Visual Basic
Рис, 3.2. Вид панели инструментов Visual Basic в приложении Word
Кнопки в этой панели инструментов, как правило, соответствуют пунктам подменю Макрос из меню Сервис. Вот для чего предназначены некоторые из этих кнопок (слева направо, см. рис. 3.2).
* Первые две кнопки предназначены соответственно для выполнения и записи макросов.
* Кнопка справа от кнопки Безопасность вызывает редактор Visual Basic. Если вы часто используете редактор Visual Basic, а другие кнопки в этой панели инструментов вам не нужны, скопируйте кнопку вызова редактора в другую панель. Чтобы скопировать кнопку в любом из приложений Office, перетащите ее на новое место, удерживая при этом нажатой клавишу Alt.
* Кнопка с изображенными на ней молотком и гаечным ключом открывает панель элементов управления, очень похожую на панель элементов управления VBA. В Office вы можете поместить элементы управления VBA в сам документ, а не только в VBA-форму.
* Кнопка с изображенными на ней линейкой, треугольником и карандашом включает режим проектирования, в котором вы можете редактировать элементы управления VBA в своем документе.
Краткое знакомство с редактором 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 (Применяется к...) | Эта ссылка присутствует тогда, когда раздел справки относится к свойству, методу или событию. Щелкните на ней, чтобы увидеть список объектов, с которыми свойство, метод или событие можно использовать |
Позаимствуйте программный КОД из файла справки