VBA для чайников - Стив Каммингс
Шрифт:
Интервал:
Закладка:
Представьте себе учителя, который ставит отличную оценку за подобную поэму:
Розы красные
Фиалки фиолетовые
У меня есть велосипед
Любишь ли ты рыбу?
потому что каждая из строк имеет вполне понятный смысл. Компилятор VBA подобен такому учителю.
Как только компилятор закончит свою работу, программа начнет выполняться. Вы можете теперь испытать все ее возможности и увидеть, работает ли она так, как вы планировали.
Нашу с вами программу тестировать легко. Если в окне будет нужное сообщение, а не Windows Must Die!, и если шелчок на кнопке ОК завершает выполнение программы, то примите мои поздравления. Если же нет, то придется вам заняться искоренением ошибок.
4-й шаг. Отладка
По мере усложнения программ вероятность появления ошибок в работе (ошибок выполнения) растет экспоненциально. После обнаружения такой ошибки главной задачей становится выявление причины ошибки и устранение проблемы. Одним словом, это отладка.
В небольших программах иногда работает следующий грубый, но достаточно эффективный метод: просто начните внимательно читать весь программный код с самого начала строку за строкой, чтобы попытаться обнаружить, что именно порождает проблему. Поняв это, вы сможете, как правило, без особых усилий устранить ее. (Если что-то не так с вашей программой-примером, просто сравните свой программный код с напечатанным здесь и внесите необходимые исправления.)
К счастью, VBA предлагает несколько средств автоматизации процесса отладки в дополнение к предложенному выше методу ломания головы. Все подробности вы найдете в главе 14.
Знайте, что описанные выше методы - а работают они только в редакторе Visual Basic, - будут единственными способами непосредственного запуска программ, построенных на форме, как наша программа-пример. Чтобы вывести форму на экран из VBA-приложения, нужно с помощью редактора
Visual Basic создать процедуру типа Sub (макрос), которая вызывает форму, а затем выполнить эту процедуру (макрос) в приложении. Для этого сделайте следующее.
1. В редакторе Visual Basic выберите Insert=Module, чтобы создать модуль и открыть окно его программного кода.
2. Напечатайте следующие строки программного кода:
Sub ShowQuote()
UserForml.Show
End Sub
Если ваша форма названа не UserFormi, а как-то иначе, замените это имя во второй строке на правильное.
Сохранив изменения, вы сможете начать выполнение макроса ShowQuote способом, предлагаемым в главе 4. Более подробно выполнение программ, основанных на формах, обсуждается в главе 10.
Я считаю, что лучший способ доступа к VBA-приложениго при работе в редакторе Visual Basic обеспечивается стандартными приемами Windows для перехода от приложения к приложению. Нажимайте Alt-Tab до тех пор, пока в появившемся окне не будет выбрана пиктограмма нужного вам приложения, после чего отпустите клавиши. Любой из следующих способов годится тоже.
* Выберите View=AutoCAD (или имя того приложения, с которым работаете вы).
* Щелкните на кнопке View в левой части панели инструментов редактора Visual
* Basic - на этой кнопке будет пиктограмма, представляющая документ приложения.
* Нажмите Alt+F11.
* Щелкните на кнопке приложения в панели задач Windows.
Вернуться в редактор Visual Basic можно с помощью Alt+Tab, панели задач, снова нажав Alt+F11 или выбрав Сервис=Макрос=Редактор Visual Basic.
Собираясь пожелать редактору Visual Basic доброй ночи, сделайте это одним из следующих двух способов, каждый из которых закрывает редактор и возвращает вас как раз к тому приложению, откуда этот редактор был вызван.
* Выберите FileClose and Return to приложение.
* Нажмите Alt+Q.
Глава 4. Выполнение VBA-программ.
В этой главе ...
~ Выполнение программ и макросов из диалогового окна Макрос - надежно, но не слишком интересно
~ Запуск макросов с помощью кнопок панели инструментов и пунктов меню
~ Назначение для макросов комбинации клавиш
~ Автоматический запуск программ при наступлении определенных событий
Убойная сила VBA-программы не значит ничего до тех пор, пока вы не нажмете ее спусковой крючок. А в нашем случае ЭТОТ спусковой крючок сначала нужно еще найти.
Говоря более прозаическим языком, пока вы не найдете способ, с помощью которого сможете запустить свою VBA-программу, программа остается бесполезной.
Во время создания программы в окне редактора Visual Basic вы всегда могли выполнить ее, нажав F5 или щелкнув на кнопке Run (Выполнить) в панели Standard (Стандартная) редактора Visual Basic. Это вполне удобно при тестировании программы, но совершенно никуда не годится для реальной работы. После того как программа готова, ее нужно запускать из соответствующего приложения.
В этой главе обсуждаются возможности, которые можно использовать для запуска
VBA-программ и макросов из VBA-приложений. (Еще раз напомню, что макрос- это та же VBA-программа, которой посчастливилось быть записанной средствами автоматической записи; подробности в главе 2. Не пишите программу, когда можно записать макрос.) Одна из самых простых возможностей для запуска большинства программ обеспечивается диалоговым окном Макрос, но уж очень это неудобно. VBA-программа становится действительно полезной, когда вы можете запустить ее командой меню, кнопкой в панели инструментов или нажатием определенной комбинации клавиш, а еще лучше, предусмотрев автоматическое выполнение.
Попрактикуйтесь в этом с макросами, которые вы запишете, следуя указаниям главы 2, или с процедурами, которые вы создадите с помощью редактора Visual Basic, используя либо краткие инструкции из главы 6, либо подробные объяснения из частей II и III.
Все определяется именем
Вызов VBA-программы осуществляется по имени.
Извините за то, что приходится начинать с технических подробностей, но другого выхода я не вижу. При вызове VBA-программы вы на самом деле запускаете одну специальную процедуру VBA. Ваша программа может содержать немало самых различных процедур, но только одна из них имеет первую строку кода, говорящую о том, что вы хотите выполнить программ). Эта первая процедура может запускать (вызывать) другие процедуры, которые в свою очередь могут вызывать следующие и т.д. Для того чтобы выполнить программу, вы должны вызвать только первую процедуру - остальные выполнятся автоматически по мере выполнения программой своей задачи.
Хотите узнать что-нибудь более существенное по поводу процедур? Обратитесь к главе 6, где вы получите полный ответ.
А в чем же здесь проблема? В том, что, запуская VBA-программу, вы должны знать имя процедуры, которая разбудит эту программу. В программах, содержащих больше одной процедуры, запускающая процедура обычно называется Main.
Запуск из диалогового окна Макрос
Вполне надежно запускать VBA-программы из диалогового окна Макрос. Если вы не позаботились о том, чтобы приписать программу кнопке в панели инструментов или комбинации клавиш, либо если вы просто забыли, чему вы ее приписали, всегда можно воспользоваться диалоговым окном Макрос.
Вызов диалогового окна Макрос
Чтобы вызвать диалоговое окно Макрос в приложениях Office или в Visio, выполните одно из следующих действий.
* Выберите команду Сервис=Макрос=Макросы.
* Нажмите Alt+F8.
Другие VBA-приложения предлагают иные возможности для того, чтобы открыть диалоговое окно Макрос.
Диалоговое окно Макрос должно выглядеть подобно изображенному на рис. 4.1. Как всегда, некоторые детали могут быть другими, в зависимости от используемого вами VBA-приложения.
Рис. 4. 1. Диалоговое окно Макрос в приложении PowerPoint
Больше всего места в диалоговом окне Макрос выделено для списка доступных в данный момент VBA-программ.
Строго говоря, все процедуры, приведенные в списке диалогового окна Макрос, являются процедурами типа Sub (т.е. подпрограммами) без аргументов.
(Загляните в главу 2, чтобы убедиться, что это и есть официальное определение макроса.) После запуска такой процедуры от может вызывать процедуры других типов, включая процедуры типа Function (т.е. функции) и процедуры Sub с аргументами. Подробности в главе 6.
Выполнение макроса
Запуск макроса из диалогового окна Макрос вряд ли можно назвать большим достижением.
Выполняемая при этом последовательность шагов должна быть такой.
1. Выберите макрос из списка ниже поля Имя.
2. Щелкните на кнопке Выполнить.
Ну как, круто? Как альтернативу можно использовать двойной щелчок на имени программы в списке.
Единственной сложностью при этом может оказаться поиск в списке диалогового окна
Макрос имени той программы, которую нужно выполнить. Если вы испытываете такие трудности, обратитесь за помощью к следующему разделу.
Поиск макроса в диалоговом окне Макрос
В диалоговом окне Макрос имена приведенных в списке VBA-программ (макросов) могут иногда сбивать с толку. В зависимости от того, где хранится программа, она может приводиться в списке с идентифицирующим ее префиксом.