Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
пособие по VBA(Курица).docx
Скачиваний:
42
Добавлен:
17.11.2019
Размер:
2.71 Mб
Скачать

10.3. Передача параметров по ссылке

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

Если задается тип данных параметра, передаваемого по ссылке, то передаваемый параметр должен содержать значение специфицированного типа данных. Можно обойти это правило, передавая процедуре в качестве параметра выражение. В этом случае VBA вычислит выражение и передаст его значение процедуре, преобразовав его в нужный тип, если это окажется возможным.

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

Private Sub Form_Load()

Dim intX As Integer

intX = 12 * 3

ВызываемаяПроцедура(intX)

End Sub

Sub ВызываемаяПроцедура (Bar As String)

MsgBox Bar 'Значение переменной Bar - строка "36"

End Sub

Необязательные параметры

С помощью ключевого слова Optional в списке параметров можно задавать необязательные параметры

(optional arguments) процедуры. Если какой-то аргумент задан как необязательный,

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

В этом коде все аргументы не являются обязательными:

Dim strИмя As String

Dim strАдрес As String

Sub Text(Optional x As String, Optional y As String)

MsgBox x

MsgBox y

End Sub

Private Sub Exec()

strИмя = "ВашеИмя"

strАдрес = 12345 ' Передаются два параметра.

Call Text(strИмя, strАдрес)

End Sub

В этом коде некоторые аргументы обязательны:

Dim strИмя As String

Dim varАдрес As Variant

Sub Text(x As String, Optional у As Variant)

MsgBox x

If Not IsMissing(y) Then

MsgBox y

End If

End Sub

Private Sub Exec()

strИмя = "ВашеИмя" ' Второй параметр не передается.

Call Text(strИмя)

End Sub

Если необязательный параметр отсутствует, то он рассматривается как параметр с типом variant, имеющий значение Empty. В предыдущем при мере показано, как с помощью функции IsMissing проверять необязательные параметры.

Значения по умолчанию для необязательных параметров

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

Sub ListText (x As String, Optional у As Integer = 12345)

MsgBox x

MsgBox y

End Sub

Private Sub Exec()

strName = "yourname" ' Второй параметр не передается.

Call Text (strName) ' Добавляет "yourname" and "12345".

End Sub

10.4. Неизвестное число параметров

Обычно при вызове процедуры число ее параметров должно быть точно таким же, как и при ее объявлении. Ключевое слово РaramArray "разрешает" процедуре принимать произвольное число параметров. Приведем пример:

Dim x As Integer Dim у As Integer Dim intSum As Integer

Sub Sum(ParamArray intNums())

For Each x In intNums

у = у + x

Next x

intSum = у

End Sub

Private Sub Exec()

Sum 1, 3, 5, 7, 8

MsgBox intSum

End Sub