Написание новых макросов и процедур


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

Обычно термин "макрос" применяется для инструкций, которые автоматически записываются с помощью специальных инструментов в приложениях Microsoft Office, а термин "процедура" применяется к коду VBA, который пишется пользователем вручную. Иначе говоря, процедура — это компьютерная программа, которая выполняет некоторые действия с объектами и сохраняется в модуле VBA. С такой, "программной" точки зрения макрос — это тоже процедура типа Sub, не имеющая входных параметров.

Макросы образуют единственный класс процедур типа Sub, которые можно запускать на выполнение непосредственно вызовом их по имени либо из 66редактора VBA, либо из самого VBA-приложения. Написать новый макрос без использования специальных автоматических средств Microsoft Office, т.е. самостоятельно написать соответствующую процедуру типа Sub, можно либо создав в редакторе VBA новый модуль, который будет содержать эту процедуру, либо поместив эту процедуру в уже существующий модуль. Для создания нового модуля необходимо выполнить следующие действия:

1. Убедиться в том, что вы работаете с нужным проектом.

2. Активизировать редактор VBA, нажав клавиши <Alt+Fl 1>.

3. В окне Project Explorer выделить либо сам проект, либо один из его компонентов.

4. Выбрать команду Редактора VBA Insert =>Module (Добавить=> Модуль) или щелкнуть на кнопке Insert панели инструментов Standard и выберите в раскрывшемся меню команду Module.

В результате редактор VBA откроет на экране пустое окно программного кода, предназначенное для создания нового модуля (см. рис.8.8). Следует напомнить, что новому модулю при открытии окна программного кода редактор VBA по умолчанию присваивает типовое имя Module п, где п — порядковый номер модуля, созданного в данном сеансе работы с редактором VBA.

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

1. Выбрать команду меню View=> Properties Window (Вид=>Окно свойств) или щелкнуть на кнопке Properties Window в панели инструментов Standard. На экране раскроется пустое окно свойств вновь создаваемого модуля (см. рис. 9.1).

2. Здесь текстовом поле Name на вкладке Alphabetic окна Properties введите новое имя модуля. Обратите внимание, что модули имеют только одно свойство — Name (Имя).

 
 

 

 


Рис. 9.1. Окно свойств модуля для ввода его имени

 

Прежде чем создать новую процедуру в уже существующем модуле, необходимо сначала открыть окно Code для того модуля, в котором предполагается поместить эту процедуру. Для этого щелкните дважды на требуемом модуле в окне Project Explorer либо выделите этот модуль в указанном окне и выберите команду меню View => Code (см. рис. 9.2):

 
 

 

 


Рис. 9.2. Окно для ввода кода (текста) модуля

 

Следует ещё раз напомнить, что модули не хранятся в отдельных файлах, а являются частями некоторого проекта, сохраняемого в соответствующем документе VBA-приложения. Чтобы использовать один и тот же модуль в разных проектах (читай, в VBA-документах) его следует скопировать в них.



Для этой цели требуемый модуль можно предварительно экспортировать, создав отдельный файл с его текстом. Потом надо выделить его в Project Explorer, после чего выбрать команду меню File=> Export File (Файл => Экспорт файла). В раскрывшемся на экране диалоговом окне нужно указать место сохранения экспортируемого файла и, при необходимости, изменить его имя (рис. 9.3):

 
 

 


Рис. 9.3. Диалоговое окно Export File

 

Убедитесь, что в списке Тип файла выбрано значение Basic Files (*.bas), указывающее, что расширение имени файла определяет копируемый файл как файл исходного кода VBA (*.bas). Для завершения операции экспорта файла щелкните по кнопке "Сохранить".

Для того чтобы импортировать модуль, т.е. добавить экспортированный ранее файл типа .bas в любой из VBA-проектов, выберите в Project Explorer необходимый проект, а затем выберите команду меню File => lmport File (Файл=>Импорт файла). В раскрывшемся: диалоговом окне Import File надо убедиться, что в списке Тип файла выбрано значение Files of Type (*.frm, *.bas, *.cls) и дважды щелкнуть на имени того файла, который буде импортироваться (диалоговое окно "Import File" – такое же, как на рис. 9.3)

Если по какой либо причине потребуется удалить некоторый модуль из VBA-приложения, выполните следующие действия:

1. Щелчком мыши выделите в окне Project Explorer тот модуль, который требуетсяудалить.

2. Выберите команду меню File=> Remove object_name (Файл =>Удалить имя_объекта). Другой способ — щелкните в окне Project Explorer правой кнопкой на удаляемом модуле и выберите в раскрывшемся контекстном меню Remove object_name.

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

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

Для этого поместите курсор в то место в модуле, где необходимо ввести текст новой процедуры. Ключевыми словами для процедур являются операторы Sub и End Sub, т.е. новая процедура должна начинаться оператором Sub, с указанием имени процедуры, и заканчиваться оператором End Sub, который редактор VBA автоматически добавляет в строку, сразу же после того, как был введен оператор Sub.

Если модуль содержит несколько процедур, то новая процедура должна начинаться после оператора End Sub предыдущей процедуры или перед оператором Sub, которым начинается следующая процедура в модуле. Надо обязательно отметить, что основными VBA-процедурами являются процедуры типа Sub (подпрограммы) и процедуры типа Function (функции).

Попробуем на практике создать простейшую процедуру в Word 2007 (или Excel). Предположим, требуется написать простейшую процедуру, которая будет выводить на экран приветствие. Текст ее будет выглядеть так:

Sub Приветствие ()

MsgBox "Привет! Я – ваша первая процедура! "

End Sub

Чтобы всё опробовать, создайте новый модуль с именем Приветствие и введите в окно его программного кода этот текст так, как это показано на рис. 9.4.

Для этого выполните следующие действия:

1. Откройте любой документ Word (или рабочую книгу Excel).

2. Активизируйте редактор VBA, нажав клавиши <Alt+Fl 1 >.

3. В окне Project Explorer выделите проект того документа или рабочей книги, в которой будет создана эта процедура.

4. Для добавления нового модуля к проекту выберите команду Insert=> Module. На экране раскроется окно программного кода для вновь созданного модуля.

5. Присвойте новому модулю имя Приветствие и, убедившись, что курсор вставки текста находится в начале первой пустой строки, введите приведенный выше программный текст.

 

 
 

 

 


Рис 9.4. Создание процедуры "Приветствие"

ПРИМЕЧАНИЕ 7: чтобы компилятор VBA мог помогать обнаруживать синтаксические ошибки, советуем набирать ключевые слова (sub - процедура, msgbox – блок сообщения) б е з использования з а г л а в н ы х букв. Тогда, если у вас всё верно, он сам в нужных местах перейдет к заглавным буквам. Если же этого не произойдёт, значит, допущена ошибка при записи!

Завершив ввод текста процедуры, надо попробовать ее выполнить. Для этого выберите команду меню редактора VBA Tools=> Macros и в диалоговом окне Macros в списке Macro Name выберите процедуру "Приветствие", после чего щелкните на кнопке Run (Выполнить). Другой вариант: если вы уже в редакторе, выберите команду меню Run => Run Sub / UserForm или просто нажмите <F5>. В любом случае в окне Word (Excel) будет выведено окно сообщения с приветствием, записанным в тексте процедуры (рис. 9.5). Для закрытия этого окна щелкните на кнопке ОК.

 
 

 

 


Рис. 9.5. Результат работы новой процедуры "Приветствие"

Выполнение VBA-программы

Итак, в самом общем случае VBA-программа представляет собой определенную последовательность команд, которые выполняются по порядку, одна за другой, при каждом запуске программы. Сама по себе любая VBA-программа является совершенно бесполезной, если не уметь её запускать на выполнение.

Один способ мы уже знаем: VBA-программу можно выполнить в окне редактора VBA, выбрав команду меню Run=>Run ..., щелкнув на кнопке Run ... панели инструментов Standard или нажав <F5>.

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

Повторим: макрос — это та же VBA-программа, а макрос, написанный самостоятельно (без использования специальных функций Microsoft Office), — это процедура. Поэтому выполнить VBA-программу фактически означает выполнить макрос или процедуру.

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

При вызове программы на выполнение из диалогового окна Макрос следует найти в этом окне ее имя:

1) откройте диалоговое окно Макрос в том VBA-приложении, в котором будет выполняться ваша программа, т.е. перейдите на ленте приложения (для Office 2007) на вкладку Вид, раскройте в группе Макросы меню и выберите в нем команду Макросы. Вид диалогового окна Макрос приложения был показан ранее, однако некоторые детали в нем могут несколько отличаться, в зависимости от используемого VBА-приложения.

2) в диалоговом окне Макрос выбираем из списка доступных VBA-программ (или макросов) имя требуемой программы и щелкаем по кнопке Выполнить.

3) если в приведенном в окне списке макросов интересующая вас программа (или макрос) отсутствует, откройте раскрывающийся список Макросы из (для Word) и выберите в нем вместо принимаемого по умолчанию значения Активных шаблонов то, которое описывает документ, в котором хранится интересующая вас программа. Для приложения Excel подобный список называется Находится в — по умолчанию в нем выбрано значение Все открытые книги.

Обработка ошибок

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

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

Однако ту часть ошибок, которые все еще остались необнаруженными компилятором придется отыскивать самостоятельно. Самыми простыми ошибками, с которыми вы непременно столкнетесь при написании процедур VBA, являются ошибки синтаксиса (syntax error). Если при написании программного кода была допущена синтаксическая ошибка, редактор VBA сообщит об этом сразу, не дожидаясь момента выполнения программы.

Всякий раз, когда редактор VBA не сможет понять и корректно интерпретировать введенную в строку последовательность символов в качестве того или иного оператора, этот текст будет выделен красным цветом. При попытке перейти с такой строки на другую, редактор VBA выдаст сообщение о наличии ошибки с теми или иными разъяснениями. Для того чтобы описанный выше режим был активизирован, следует выбрать команду меню Tools => Optionsредактора VBA и в раскрывшемся диалоговом окне Option (Параметры) на вкладке Editor(Редактор) установить флажок опции Auto Syntax Check (автоматическая проверка синтаксиса).

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

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

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

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

Вывод: чем тщательнее будет проведено тестирование, тем устойчивее и надежнее будет работать написанная вами программа.

Тестовые задания

Ниже приведено несколько тестовых заданий, предназначенных для закрепления изложенного в этой главе материала. В каждом задании вам предлагается вопрос и несколько вариантов ответа на него, один (или несколько) из которых является правильным, остальные — нет. Укажите правильный ответ.

№ п/п Вопросы Предлагаемые ответы
Общий цикл создания VBА-программ предусматривает такую последовательность действий: а) анализ задачи, написание программного кода, тестирование и отладка, б) проектирование программы, написание программного кода, тестирование, отладка, в) анализ задачи, проектирование программы, реализация проекта, тестирование и отладка, г) анализ задачи, проектирование программы, написание программного кода, передача приложения в эксплуатацию.
Программными единицами, с которыми может работать редактор VBA, являются: а) проекты, модули, процедуры, операторы, б) проекты, программы, макросы, в) программы, модули, процедуры, операторы, г) проекты, программы, модули, процедуры.
Обмен программными модулями между проектами осуществляется с помощью следующих операций: а) копирования и вставки, б) экспорта и импорта файлов, в) совместного редактирования и слияния, г) пересылки и считывания.
Запуск VBA-программ можно организовать с помощью… а) ярлыка на рабочем столе, б) сочетания клавиш, набираемых в окне VBA-приложения, в) кнопки на панели инструментов, г) команды в меню Пуск, д) команды в меню VBA-приложения.
Редактор VBA позволяет автоматически обнаруживать следующие виды ошибок в программах: а) орфографические, б) синтаксические, в) логические, г) структурные.
Комментарии в программу помещаются для следующих целей: а) для повышения "читабельности" кода, б) для пояснения смысла выполняемых действий, в) для защиты авторских прав, г) для описания назначения переменных и функций.

 









Последнее изменение этой страницы: 2016-04-20; Нарушение авторского права страницы

infopedia.su не принадлежат авторские права, размещенных материалов. Все права принадлежать их авторам. Обратная связь