Поиск по сайту:


«VBA Подпрограмма-процедура»

Файл: 4 КБ
Поделиться:
Можно упростить программирование, разбивая задачу на небольшие логические компоненты. Эти компоненты, называемые процедурами, могут впоследствии стать строительными блоками, которые позволят усилить и расширить VBA.
При программировании с использованием процедур можно выделить два основных преимущества:
 Процедуры позволяют разбивать программы на конечное число логических единиц, каждую из которых легче отладить, чем всю программу без процедур
 Процедуры, разработанные для одной программы, могут выступать в качестве строительных блоков для других программ, обычно с небольшими изменениями или совсем без них
В VBA используется несколько видов процедур:
 Процедуры Sub (не возвращают значения)
 Процедуры Function (возвращают значения)
 Процедуры Property (могут возвращать и присваивать значения), а также устанавливать ссылки на объекты.
Процедуры Sub
Процедура Sub (или подпрограмма) - это блок кода, который выполняется в ответ на событие. Разбивая код модуля на процедуры Sub, намного легче читать или модифицировать код приложения.
Синтаксис процедуры Sub таков:
[Private | Public][Static]Sub <Имя процедуры> (<аргументы>)
	<Операторы> 
End Sub
При вызове процедуры выполняются операторы между ключевыми словами Sub и End Sub. Процедуры Sub можно помещать в стандартные модули, модули классов и форм. По умолчанию процедуры Sub во всех модулях имеют атрибут public, который означает, что их можно вызывать из любого места приложения.
Задание параметров процедуры подобно объявлению переменных. Пример:
Sub tobin(i As Integer)
Dim b As String, a As Integer, s As Single
b = "": s = CSng(i)
Do While s > 0
a = s Mod 2#
b = CStr(a) + b
s = (s) \ 2#
Loop
MsgBox b, vbOKOnly, "Результат"
End Sub
Общие процедуры
Общая процедура указывает приложению, как выполнять конкретную задачу. Однажды определенная, она должна каждый раз специально вызываться приложением. В противоположность ей процедура обработки события после вызова остается в состоянии ожидания событий, вызванных пользователем или инициированных системой.
Зачем надо создавать общие процедуры? Одна причина заключается в том, что нескольким разным процедурам обработки событий может потребоваться выполнить одни и те же действия. Общие операторы помещают в отдельную процедуру (общую процедуру), а в процедуры обработки событий помещают вызовы этой процедуры. Это исключает дублирование кода и облегчает поддержку приложения.
Создание новых процедур
Для создания новой общей процедуры следует в окне кода набрать на клавиатуре заголовок процедуры и нажать клавишу Enter. Заголовок процедуры состоит из слова Sub или Function, за которым следует имя процедуры. Например:
Sub UpdateForm () 
Function GetCoord ()
В результате VBA заполняет шаблон для новой процедуры, т.е. дописывает строку End Sub или End Function, например:
Sub UpdateForm()
. . .
End Sub.
Просмотр существующих процедур
Чтобы просмотреть процедуру в текущем модуле:

" Существующую общую процедуру можно увидеть, выбрав элемент (General) в списке Object в окне кода и затем процедуру в списке Procedure " Существующую процедуру обработки события можно увидеть, выбрав соответствующий объект в списке Object в окне кода и затем процедуру в списке Procedure

Чтобы просмотреть процедуру в другом модуле, следует:
1. Выбрать команду Object Browser (Просмотр объектов) меню View (Вид).
2. Выбрать проект в списке Project/Library (Проект/Библиотека).
3. Выбрать модуль в списке Classes (Классы) и процедуру в списке Members of (Члены).
4. Выбрать опцию View Definition (Посмотреть определение).
Вызов процедур Sub
Процедура Sub отличается от процедуры Function тем, что ее нельзя вызвать по имени в выражении. Ее вызов осуществляется в отдельном операторе. Также процедура sub, в отличие от функции, не возвращает значения. Однако, как и функция, она может изменять значения любых переменных, переданных ей в качестве параметров.
Существуют два способа вызова процедуры sub - при помощи ключевого слова Call и без него:
' Оба эти оператора вызывают процедуру Sub с именем МуРгос.
Call МуРгос (FirstArgument, SecondArgument)
МуРгос FirstArgument, SecondArgument
Заметим, что при наличии ключевого слова Call, параметры заключены в круглые скобки. Если ключевое слово Call опускается, следует опустить и скобки вокруг списка параметров.
Вызов процедур из других модулей
Процедуры, находящиеся в других модулях, могут быть вызваны из любого места проекта. Возможно, придется указать модуль, в котором содержится вызываемая процедура. Способы вызова открытых процедур разнообразны и зависят от того, где расположена процедура - в модуле формы, модуле класса или стандартном модуле.
Процедуры в формах
Для вызова процедуры, находящейся во внешнем модуле, т.е. в не в том модуле, в котором находится код, из которого производится вызов процедуры, перед именем процедуры должно быть указано имя модуля, в котором находится код процедуры. К примеру, если код процедуры с именем SomeSub находится в модуле формы, названном Form1, то вызвать процедуру можно следующим оператором:
Call Form1.SomeSub(<аргументы>)
Процедуры в стандартных модулях
Процедура является уникальной, если она определена только в одном месте.
Если имя процедуры уникально, то включать имя модуля в вызов процедуры не обязательно. Внешние или внутренние вызовы процедуры будут ссылаться на это уникальное имя.
Если два или более модулей содержат процедуры с одинаковыми именами, при вызове таких процедур необходимо уточнять их с помощью имени соответствующего модуля. Вызов общей процедуры из модуля, ее содержащего, запускает процедуру этого модуля. Например, если процедура с именем CommonName существует и в модуле Module1, и в модуле Module2, то вызов CommonName из модуля Module2 запустит процедуру CommonName модуля Module2, а не процедуру CommonName модуля Module1.
Вызов общей процедуры из другого модуля должен уточнять модуль, в котором расположена процедура. Например, вызвать процедуру с именем CommonName модуля Module2 из модуля Module1 можно следующим образом:
Module2.CommonName(<аргументы>)