Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование в Excel.doc
Скачиваний:
21
Добавлен:
03.05.2019
Размер:
1.48 Mб
Скачать

1.1.5. Закрытые и открытые процедуры

Открытую процедуру, объявленную с применением ключевого слова Public, разрешается вызывать из любой процедуры любого модуля приложения. Закрытую процедуру, объявленную с помощью ключевого слова Private, можно вызывать только из процедур, содержащихся в том же (что и закрытая процедура) модуле. Процедуры Sub и Function могут быть либо закрытыми, либо открытыми. Следующие процедуры закрытые:

Private Sub Test1() MsgBox "This is the Test1 procedure running" End Sub

Private Function AddThree(OriginalValue As Long) AddThree = OriginalValue + 3 End Function

А эти — открытые:

Public Sub Test1() MsgBox "This is the Test1 procedure running" End Sub

Public Function AddThree(OriginalValue As Long) AddThree = OriginalValue + 3 End Function

Если в объявлении процедуры не указано ни Private, ни Public, то по умолчанию она считается открытой. Хотя для создания открытой процедуры использовать ключевое слово Public не обязательно, включение его в объявление процедуры упрощает понимание того, какие процедуры открытые, а какие закрытые.

1.1.6. Использование значения, возвращаемого функцией

Чтобы функция возвращала значение, в ней должен быть оператор, который присваивает это значение имени функции. В следующем примере значение, присваиваемое ConeSurface, и будет значением, возвращаемым функцией:

Function ConeSurface(radius, height) Const Pi = 3.14159 coneBase = Pi * radius ^ 2 coneCirc = 2* Pi* radius coneSide = Sqr(radius ^ 2 + height ^ 2) * coneCirc / 2 ConeSurface = coneBase + codeSide End Function

Данные, необходимые процедуре типа Sub или Function для выполнения ее задачи (в предыдущем примере —radius и height), передаются как аргументы. Значение, возвращаемое процедурой типа Function, можно сделать частью более сложного выражения. Приведенный ниже оператор (из какой-то другой процедуры) использует значения, возвращаемые функциями ConeSurface и ScoopSurface:

totalSurface = ConeSurface(3. 11)+2* ScoopSurface(3)

1.1.7. Выполнение процедуры Sub

Вы можете сделать так, чтобы процедура Sub выполнялась при определенном событии, запустить ее из Visual Basic Editor, из окна Вашего приложения или вызвать из другой процедуры.

  • Чтобы процедура Sub автоматически выполнялась всякий раз, когда возникает определенное событие, добавьте ее вызов к процедуре обработки этого события.

  • Чтобы запустить процедуру Sub из Visual Basic Editor, установите курсор ввода в любой участок процедуры и либо нажмите клавишу F5, либо щелкните кнопку RunSub/UserForm (Запуск_подпрограммы/UserForm) на панели инструментов Standard (Стандарт) или Debug (Отладка).

  • Чтобы запустить процедуру Sub, которая является макросом, выберите ее имя в диалоговом окне Macros (Макрос) приложения и щелкните кнопку Run (Выполнить).

  • Чтобы вызвать процедуру Sub из другой процедуры, используйте ее имя по аналогии со встроенными ключевыми словами. Вот пример процедуры, вызывающей процедуру DisplayWelconne:

Sub TestCall() DisplayWelcome End Sub

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

Когда Вы вызываете процедуру, расположенную не в текущем модуле, Visual Basic просматривает другие модули и выполняет первую найденную открытую процедуру с указанным именем. Если имя открытой процедуры не уникально, лучше явно задать модуль, в котором она находится. В следующем примере вызывается процедура Sub с именем “DisplayWelcome” из модуля “TestTools”:

TestTools.DisplayWelcome

При необходимости можно указать и проект, в котором находится процедура. Вот пример вызова процедуры Sub с именем “DisplayWelcome” из модуля “TestTools”, относящегося к проекту “TestDocument”:

TestDocument.TestTools.DisplayWelcome

Здесь Вы указываете кодовое имя проекта, а не имя документа, с которым связан этот проект. Выяснить кодовое имя (и изменить его) можно в поле, расположенном справа от строки (Name) в окне свойств для данного проекта. Чтобы вывести на экран это окно, выделите подсветкой нужный проект в окне проекта и выберите из меню View (Вид) команду Properties Window (Окно свойств). Кодовое имя проекта можно изменить и по-другому — ввести новое имя в поле Project Name (Имя проекта) на вкладке General (Общие) диалогового окна Project Properties (Свойства проекта). Чтобы открыть это диалоговое окно, щелкните правой кнопкой мыши нужный проект в окне проекта и выберите из контекстного меню команду Properties (Свойства...) (название этой команды дополняется именем проекта). Справку о параметрах, устанавливаемых в диалоговом окне Project Properties (Свойства проекта), Вы получите, нажав клавишу F1.

Если Вы хотите, чтобы процедуру можно было вызывать из других модулей проекта, но не из других проектов, объявите ее открытой, а модуль, в котором она находится, — закрытым. Для этого добавьте в раздел (Declarations) [(Описания)] данного модуля оператор Option Private Module.

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