Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VBA-Laboratorny_praktikum.doc
Скачиваний:
4
Добавлен:
01.04.2025
Размер:
4.56 Mб
Скачать

6.2.1.Передача по ссылке и по значению

Передача аргументов из одной программы в другую осуществляется двумя способами — по ссылке (by reference) и по значению (by value). В первом случае передается сама переменная, поэтому ее значение в подпрограмме можно изменить. Во втором случае — только значение переменной, а не она сама, и изменить ее в вызванной подпрограмме нельзя.

Выбор способа передачи осуществляется ключевыми словами ByRef и ByVal, которые в круглых скобках указываются в описании вызываемой подпрограммы.

В Модуль5 наберите и протестируйте работу следующих программ:

  1. Пример передачи переменной UserName по ссылке с одним и тем же именем переменной (подпрограмма вызывается только для одной переменной):

Sub ПередачаАргументаПоСылке ()

Dim UserName As String

UserName = "Иван"

ChangeName UserName

MsgBox UserName

End Sub

Sub ChangeName (ByRef UserName)

UserName = "Петр"

End Sub

  1. Пример передачи переменной по ссылке с разными именами (одна и та же подпрограмма вызывается для разных переменных):

Sub ПередачаАргументаПоСсылке_РазныеПеременные ()

Dim UserName As String

UserName = "Иван"

ChangeName2 UserName

MsgBox UserName

End Sub

Sub ChangeName2(ByRef NewName)

NewName = "Петр"

End Sub

  1. Пример передачи переменной по значению (в подпрограмму передается только её значение):

Sub ПередачаАргументаПоЗначению()

Dim UserName As String

UserName = "Иван"

ChangeName3 UserName

MsgBox "В исходной программе имя осталось прежним " _

& UserName

End Sub

Sub ChangeName3(ByVal UserName)

MsgBox "Сначала был " & UserName & "."

UserName = "Петр"

MsgBox "В вызванной подпрограмме имя стало " & UserName

End Sub

6.3.Функции

Отличие функции от подпрограммы:

  • Функция начинается ключевым словом Function и заканчивается ключевыми словами End Function.

  • Функцию можно вызывать из формулы, введенной в ячейку.

  • Функция может возвращать значение в вызывающую программу или формулу.

Рассмотрим пример функции Multiply, вычисляющей произведение двух чисел.

Sub ВызовФункции()

Dim Var1 As Integer

Dim Var2 As Integer

Dim Var3 As Integer

Var1 =5

Var2 = 10

Var3 = Multiply(Var1, Var2)

MsgBox Var3

End Sub

Function Multiply(ByVal Var1, ByVal Var2)

Multiply = Var1 * Var2

End Function

6.4.Область видимости переменных

Как вы знаете, в VBA переменные имеют три уровня видимости: процедуры, модуля, проекта (или общий уровень), которые в равной степени относятся и к одиночным переменным, и к массивам.

В Модуль5 наберите и протестируйте работу представленных ниже программ.

6.4.1.Переменные уровня процедуры

Следующий пример демонстрирует переменную, объявленную на уровне процедуры – любая попытка использовать переменную Var1 вне этой процедуры приведет к ошибке.

Sub ПеременныеУровняПроцедуры ()

Dim Var1 As Integer

Var1 =55

MsgBox Var1

DisplayMessage

End Sub

Sub DisplayMessage()

MsgBox Var1

End Sub

Чтобы исходное значение Varl (55) было доступно в DisplayMessage, придется либо передать его в качестве аргумента, либо расширить область видимости этой переменной.

6.4.2.Переменные уровня модуля

Переменную уровня модуля можно использовать в любой подпрограмме или функции того модуля, где эта переменная была определена. Чтобы сделать переменную доступной на уровне модуля, объявите её перед любыми подпрограммами и функциями, как показано в примере:

Dim Var2 As String

Sub ПеременнаяУровняМодуля()

Var2 = "Привет!"

DisplayMessage2

End Sub

Sub DisplayMessage2()

MsgBox Var2

End Sub

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]