потому что каждая из строк имеет вполне понятный смысл. Компилятор 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-программ (макросов) могут иногда сбивать с толку. В зависимости от того, где хранится программа, она может приводиться в списке с идентифицирующим ее префиксом.
Рассмотрим для примера Excel, где вы можете выполнять как программы, хранящиеся в активной рабочей книге (т.е. той. которую вы используете в этот момент), так и программы из других открытых рабочих книг. В диалоговом окне Макрос макросы из активной рабочей книги приводятся под своими собственными именами. А вот макросы из других открытых книг представлены именами, составленными из имени рабочей книги и следующего за ним имени макроса с восклицательным знаком между этими именами в качестве разделителя. Пример показан на рис. 4.2.
Рис. 4.2. Диалоговое окно Макрос в Excel приводит имена VBA -программ (макросов) из неактивных рабочих книг, любезно указывая перед именем программы имя содержащей ее книги
В диалоговом окне Макрос в Word процедуры приводятся в списке по их именам, за исключением того случая, когда две или несколько процедур имеют одно ii то же имя. В этом случае имя состоит из имени содержащего процедуру модуля, за которым следуют сначала точка, а затем уже имя процедуры. В качестве доказательства я поместил здесь рис. 4.3.
Рис. 4.3. Диалоговое окно Макрос в Word
Если программа, которую вы хотите запустить, отсутствует, вам необходимо выбрать и окне Макрос другой вариант. Для того чтобы это сделать, воспользуйтесь списком Макросы из, в котором выберите вариант Активных шаблонов.
Быстрый запуск программ
Может быть, диалоговое окно Макрос работает и идеально правильно, но оно так неэффективно! Ведь когда требуется что-то выполнить, обычно это нужно немедленно, КТО захочет открывать диалоговое окно, искать в длинном списке приведенных MCIKHV шрифтом имен и шелк, щелк, щелк, щелк.
Есть и лучшие способы запуска VBA-программ. Назначьте каждой из СНОПУ очень часто используемых программ кнопку в панели инструментов, пункт в меню или комбинацию клавиш. Тогда один-два щелчка или одна нажатая комбинация клавиш принесут вам желанное вознаграждение.
Как вы, наверное, помните (если, конечно, читали главу 2), многие VBA приложения позволяют связать макрос с кнопкой и панели инструментов или комбинацией клавиш уже при записи макроса. Это, кстати, довольно веская причина и пользу того, чтобы начинать каждую новую VBA-программу как записываемый макрос, который затем нужно дополнить своим программным кодом. Если вам нужно обновить в памяти информацию о тонкостях этого процесса, обратитесь к главе 2.
После того как макрос записан, у вас тоже должна быть возможность назначить ему кнопку или комбинацию клавиш, а может быть, и пункт меню. Вся остальная часть материала этой главы посвящена обсуждению именно этих возможностей. К сожалению, техника выполнения этой задачи немного варьирует от приложения к приложению. На некоторые из таких вариаций я буду обращать ваше внимание в ходе следующего (довольно долгого) раздела.
Кнопки запуска программ
Какое приятное волнение испытываешь, щелкая на маленькой оригинальной кнопке на экране и получая при этом немедленный ответ своего компьютера! Несомненно, существуют и более приятные волнения, но и нажатие кнопки имеет свою прелесть. А если кнопка, на которой вы щелкаете, вызывает созданную лично вами VBA-программу, к этому волнению добавляется еще и небольшое головокружение от успеха.
В некоторых VBA-приложениях назначение кнопок для вызова VBA-программ происходит очень просто, даже если вы создавали программу, не записывая ее в виде макроса. К таким приложениям относятся приложения из Office. В других VBA-приложениях, как в Visio, вам, вероятно, придется самому печатать программный код VBA, который добавит подходящую кнопку.
Ой! А я-то думал, что VBA предлагается в виде визуального средства разработки интерфейса!
Кнопки на панели инструментов или меню
Если вы никак ничего не можете решить по этому поводу, просто помните, что между кнопкой на панели инструментов и элементом меню больших различий не т - все они реагируют на щелчок мыши. Основное отличие состоит в том. что в меню отображается текст, а на кнопке - картинка. Результат использования обоих элементов будет один и то же.
Приложения Office позволяют использовать приемы drag-and-drop для назначения VBAпрограми-е кнопки на панели инструментов или элемента меню.
В Microsoft Word, Excel, PowerPoint, Access, а также Outlook назначать VBA-программе новую кнопку в панели инструментов очень просто- перетащите с помощью мыши. После того как кнопка займет предназначенное ей место, вы можете создать на этой кнопке еще и подходящий рисунок.
Чтобы в Word создать кнопку для вызова VBA-программы, сделайте следующее.
1. Щелкните правой кнопкой мыши в любой из панелей инструментов.
После этого на экране возникнет контекстное меню.
2. В самом низу этого меню выберите Настройка, чтобы открыть диалоговое окно Настройка с вкладками, в котором будет изначально открыта вкладка Панели инструментов.
Открыть диалоговое окно Настройка можно без выполнения п. 1, выбрав из меню Сервис=Настройка.
3. В диалоговом окне Настройка щелкните на ярлыке вкладки Команды (рис. 4.4).
4. Прокрутите список Категории вниз и найдите пункт Макросы. Щелкните на этом пункте, чтобы выбрать его.
При этом справа, в списке Команды, появятся все имеющиеся в вашем распоряжении VBA -программы. (Диалоговое окно Настройка на рис. 4.4 как раз и показывает макросы.)
5. Найдите необходимый макрос в списке (это может быть и VBA-программа, написанная вами с самого начала).
6. Если вы создаете кнопку, найдите в списке ту программу, которой нужно назначить кнопку. Затем перетащите имя этой программы в подходящую панель инструментов. Если вы создаете команду в меню, найдите в списке ту программу, которой нужно назначить кнопку. Затем перетащите имя этой программы прямо в меню.