ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 18.06.2025
Просмотров: 8995
Скачиваний: 0
строка с оператором Do. Этот пример делает программу несколько понятнее, так как не используется отрицание, необходимое в примере Do While:
Sub DoUntilDemoK)
Open "c:\data\textfile . txt" For Input As #1 LineCt в О
Do Until EOF(l)
Line Input #1, LineOfText
Range("Al").Offset(LineCt, 0) = UCase{LineOfText) LineCt m LineCt + 1
Loop Close #1
End Sub
Резюме
В данной главе рассматривались основы программирования на VBA. Речь шла о переменных, константах, типах данных, массивах и встроенных функциях VBA. Кроме того, здесь описаны методы управления объектами и контроля за выполнением процедур.
Глава 9 посвящена одному из двух, типов процедур, которые можно создавать в VBA.
208 |
Глава 8. Основы программирования на VBA |
Работа
с процедурами VBA
Процедура содержит группу операторов VBA, которые выполняют поставленную задачу. Большая часть кода VBA содержится в процедурах. Данная глава сосредоточена
на процедурах, которые выполняют задачи, но не возвращают дискретные значения.
В главе 11 также приведены примеры процедур, которые вы можете использовать в своей работе.
О процедурах
Процедура — это последовательность операторов VBA, расположенная в модуле VBA, доступ к которому вы получаете с помощью VBE. Модуль может включать любое количество процедур.
Существует несколько способов вызвать, или выполнить, процедуры. Процедура выполняется от начала до конца (этот процесс также можно преждевременно прернать).
Процедура может иметь любую длину, но многие предпочитают избегать чересчур длинных процедур, выполняющих большое количество разных операций. Возможно, проще будет написать несколько меньших процедур, каждая из которых выполняет свою задачу, а затем разработать главную процедуру, вызывающую эти маленькие процедуры. Такой подход облегчит дальнейшее управление вашей программой.
Некоторые процедуры получают аргументы. Аргумент — это информация, используемая процедурой в процессе выполнения. Аргументы процедуры во многом подобны аргументам, используемым функциями Excel. Инструкции в процедуре обычно выполняют логические операции над аргументами, а результаты процедуры обычно основаны на представляемых ей аргументах.
Объявление процедуры
При объявлении процедуры с использованием ключевого слова Sub необходимо придерживаться следующего синтаксиса.
[Private | Public]{Static] |
Sub имя ([список_аргументов]) |
[инструкции] |
4 |
[Exit Sub] |
|
[инструкции] |
End Sub
P r i v a t e (необязательное ключевое слово) — указывает на то, что процедура доступна только для других процедур в том же модуле.
P u b l i c (необязательное ключевое слово) — указывает на то, что процедура доступна для всех остальных процедур во всех модулях рабочей книги. При использовании в модуле, содержащем оператор O p t i o n P r i v a t e Module, процедура будет не доступна за пределами проекта.
S t a t i c (необязательное ключевое слово) — указывает на то, что переменные процедуры сохраняются после окончания процедуры.
Sub (обязательное ключевое слово} — обозначает начало процедуры. имя — любое корректное название процедуры.
список_аргумэнтов — представляет заключенный в скобки список переменных, содержащих аргументы, которые передаются it процедуру. Для разделения аргументов используется запятая. Если процедура не использует аргументы, то необходимо включить в объявление процедуры пустые скобки.
инструкции (необязательные) — корректные инструкции VBA.
E x i t |
Sub (необязательный оператор) — вызывает немедленный выход из процедуры до |
ее формального завершения. |
|
End |
Sub (обязательный оператор) — указывает на окончание процедуры. |
За некоторым исключением, все инструкции VBA в модуле должны содержаться в процедурах. Эти исключения касаются объявления переменных уровня модуля, определения пользовательских типов данных и некоторых других инструкций, определяющих параметры на уровне модуля (например, option Explicit) .
Название процедуры
Каждая процедура должна иметь название. Правила именования процедур, в основном, такие же, как при именовании переменных. В идеале название процедуры должно описывать, что выполняют операторы, содержащиеся в процедуре. Хорошее правило— использование названия, включающего глагол и существительное (например, ProcessDate — обработать данные, PrintReport - распечатать отчет, sort _ Array - сортировать массив или checkFilenaine - проверить имя файла). Избегайте незначимых названий (Dolt, Update, Fix и т.п.).
Некоторые программисты используют названия, которые структурно напоминают предложения, описывающие процедуру (например, WriteReportToTextFile - записать отчет в текстовый файл, Get_Print_Options_ard_Print_Report - получить параметры печати и распечатать отчет). Длинные названия точны и однозначно представляют предназначение процедуры, однако вводить их намного сложнее и дольше.
210 |
Глава 9. Работа с процедурами VBA |
Область действия процедуры
В предыдущей главе отмечалось, что область действия переменной определяется модулями и процедурами, в которых может использоваться переменная. Аналогичным образом область действия процедуры определяет, какие процедуры могут ее вызывать,
Процедуры Public
По умолчанию все процедуры имеют область действия P u b l i c — т.е. могут вызываться другими процедурами в любом модуле рабочей книги. Ключевое слово P u b l i c использовать необязательно, но программисты часто включают его для ясности. Обе приведенные ниже процедуры имеют область действия Public .
Sub |
F i r s t ( ) |
' |
...[код процедуры].. |
End Sub |
|
Public Sub Second О
...[код процедуры]..
End Sub
Процедуры Private
Процедуры P r i v a t e могут вызываться другими процедурами в этом же модуле, но не процедурами другнх модулей.
При выборе команды Сервис^Макрос^Макросы в Excel в диалоговом окне Макрос отображаются только Public-процедуры. Следовательно, при наличии процедур, которые должны вызываться только процедурами в этом же модуле, необходимо убедиться, что процедура имеетобластьдействия Private—таким образом вы предотвратите запуск этой процедуры из диалогового окна Макрос.
В следующем примере объявляется процедура P r i v a t e с названием MySub:
Private Sub MySubO
. .. [здесь идет код].. End Sub
Вы можете назначить всем процедурам модуля область действия Private — дажетем, которыеобъявлены с использованием ключевого слова Public. Для этого включите следующий оператор перед первым оператором sub:
Option Private Module
Введя указанный оператор в модуле, вы можете опустить ключевое слово P r i - vate в объявлениях процедур.
Функция записи макросов Excel обычно создает новые процедуры с названием Макрос1, Какрос2 и т.д. Все эти процедуры имеют область действия Public, и не имеют аргументов.
Выполнение процедуры
Далее вы узнаете несколько способов, как выполнить, или вызвать, процедуру VBA.
•С помощью команды Rurr^Run Sub/UserForm (в VBE). Альтернатива— нажать <F5>. Excel выполняет процедуру, в которой находится курсор. Этот метод не срабатывает, если процедура имеет один или более аргументов.
Часть №. Visual Basic forApplications |
211 |
Из диалогового окна Макрос программы Excel (которое можно открыть, выбрав команду Сервис^Макрос^Макросы). Другой способ отобразить диалоговое окно Макрос — нажать <Alt+F8>.
С помощью комбинации клавиши <Ctrl> и присвоенной процедуре клавиши (если процедуре присвоена комбинация клавиш).
Щелкнув на кнопке или форме рабочего листа. Для этого кнопке или форме должна быть присвоена процедура.
Из другой процедуры.
С помощью кнопки на панели инструментов. Из специально разработанного меню.
По выполнению определенного события. Такими событиями может выступать открытие рабочей книги, сохранение рабочей книги, закрытие рабочей книги, изменение ячейки, переход на другой рабочий лист и многое другое.
Из окна Immediate редактора Visual Basic. Просто введите название процедуры, включите необходимые аргументы, и нажмите <Enter>.
В Excel 5 и Excel 95 можно легко связать макрос с новым элементом меню Tools (Сераис). Начиная с Excel 97, эта возможность уже не поддерживается.
Рассмотренные методы запуска процедур подробно обсуждаются в следующих разделах.
Во многих случаях процедура не будет правильно работать, если она не выполняется в правильном контексте. Например, если процедура должна работать с активным рабочим листом. он,э выдаст ошибку, если активным является лист диаграммы. Хорошая процедура включает код, выполняющий проверку соответствующего контекста, и вместо сообщения об ошибке элегантно извещает о завершении своей работы.
Выполнение процедуры с помощью команды Run^Run Sub/UserForm
Команда меню Run^Run Sub/UserForm в VBE используется преимущественно для тестирования процедуры в процессе ее разработки. Пользователь вряд ли станет активизировать редактор Visual Basic, чтобы запустить процедуру. Выберите команду Rurr^Run Sub/UserForm (или нажмите клавишу <F5>) в VBE. чтобы выполнить текущую процедуру (другими словами, процедуру, в которой расположен курсор),
Если курсор во время выбора команды Run^Run Sub/UserForm находится не в одной из процедур, то VBE отображает диалоговое окно Макрос, в котором можно выбрать процедуру для выполнения.
Выполнение процедуры в диалоговом окне Макрос
При выборе команды Сервис^Макрос^Макросы в Excel отображается диалоговое окно Макрос — рис. 9.1 (кроме того, это диалоговое окно можно открыть с помощью комбинации клавиш <Alt+F8>). В диалоговом окне Макрос перечислены все созданные вами процедуры. Используйте раскрывающийся список Находится в, чтобы фильтровать отображаемые макросы по области действия (например, показать только макросы активной рабочей книги).
212 |
Глава 9. Работа с процедурами VBA |
В диалоговом окне Макрос не отображаются процедуры функций. В нем также не представлены процедуры, объявленные с ключевым словом P r i v a t e , процедуры, требующие аргументов или процедуры надстроек.
Процедуры, которые хранятся в надстройках, не перечислены в диалоговом окне Макрос, но их можно выполнить, если вы знаете точное название процедуры. Введите название в поле Имя макроса диалогового окна Макрос и щелкните на кнопке Выполнить.
Рис. 9.1. В диалоговом окне Макрос перечисленывседоступныепроцедуры
Выполнение процедуры с помощью комбинации клавиш
Любок процедуре, не имеющей аргументов, можно присвоить комбинацию <Со-1+специать- ная клавишах Например, если вы присвоите процедуре с названием U p d a t e комбинацию клавиш <Ctrl+U>, то при нажатии <CtrI+U> она будет выполняться.
В начале записи макроса в диалоговом окне Запись макроса вам предоставляется возможность задать комбинацию клавиш, которая будет использоваться для его выполнения. Ее можно присвоить в любое удобное для вас время. Чтобы присвоить процедуре комбинацию клавиш (или изменить уже существующую), выполните следующие действия.
1.Запустите Excel и выберите команду Сервис^Макрос^Макросы.
2.Выберите необходимую процедуру из списка в диалоговом окне Макрос.
3.Щелкните на кнопке Параметры, чтобы отобразить диалоговое окно Параметры макроса, показанное на рис. 9.2.
4.Введите символ в текстовое поле Ctrl+.
Символ, который вы вводите в текстовое поле Ctrl +, чувствителен к регистру. Если вы введете s в нижнем регистре, то присваивается комбинация клавиш <Ctrl+S>. Если вы введете 5 в верхнем регистре, то присваивается комбинация клавиш <Ctrl+Shift+S>.
5.Добавьте описание (но желанию). После введения описание будет отображаться в нижней части диалогового окна Макрос при выборе процедуры из списка.
6.Щелкните на кнопке ОК, чтобы закрыть диалоговое окно Параметры макроса, затем щелкните на кнопке Закрыть, чтобы закрыть диалоговое окно Макрос.
Рис. 9.2. В диалоговом окне
Параметры макроса можноприсвоитьпроцедуреKO.U
бинациюклавиш и(необязательно)описание
Часть HI. Visual Basic forApplications |
213 |