Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lection7.docx
Скачиваний:
31
Добавлен:
31.03.2015
Размер:
55.51 Кб
Скачать
    1. Необязательные параметры

Язык VBA позволяет объявлять параметр как необязательный, а также задавать так называемыезначения по умолчанию.

Для указания того, что параметр является необязательным, используется ключевое слово Optional, которое ставится перед именем параметра.

Для задания значения по умолчанию после описания формального параметра ставится знак равенства и значение, которое подставляется в подпрограмму, в случае отсутствия в вызове соответствующего фактического параметра.

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

Public Function RangePart(r As Range, Optional row As Integer = 0, Optional column As Integer = 0) As Variant

If row = 0 And column = 0 Then

RangePart = r

ElseIf row = 0 Then

RangePart = r.Columns(column)

ElseIf column = 0 Then

RangePart = r.Rows(row)

Else

RangePart = r.Cells(row, column)

EndIf

EndFunction

'Функция возвращает весь диапазон, переданный в качестве первого параметра

r = RangePart(Worksheets(5).Range("A1:C4"))

'Функция возвращает одну ячейку, находящуюся в 1 строке 3 столбце

r = RangePart(Worksheets(5).Range("A1:C4"), 1, 3)

'Функция возвращает одну строку

r = RangePart(Worksheets(5).Range("A1:C4"), 5)

'Функция возвращает один столбец

r = RangePart(Worksheets(5).Range("A1:C4"), , 4)

r = RangePart(Worksheets(5).Range("A1:C4"), column:=4)

Параметры с типом Variantможно просто опускать, без задания значения по умолчанию, т.к. типVariantпозволяет в самом параметре указать факт отсутствия параметра. Для проверки, был ли параметр задан, используется функцияIsMissing. Рассмотрим для примера процедуру, которая в заданном диапазоне заменяет отрицательные числа. Кроме исходного диапазона можно также задать диапазон, откуда берутся числа для замены (в случае отсутствия этого параметра отрицательные числа заменяются модулями), и диапазон, куда копируется исходный диапазон с изменёнными значениями.

Public Sub Change(source As Range, Optional replace, Optional dest)

Dim i As Integer, j As Integer

If IsMissing(dest) Then

Set dest = source

Else

If TypeName(dest) <> "Range" Then Exit Sub

End If

If Not IsMissing(replace) And TypeName(replace) <> "Range" Then Exit Sub

For i = 1 To source.Rows.Count

For j = 1 To source.Columns.Count

If source.Cells(i, j) < 0 Then

If IsMissing(replace) Then

dest.Cells(i, j) = -source.Cells(i, j)

Else

dest.Cells(i, j) = replace.Cells(i, j)

End If

Else

dest.Cells(i, j) = source.Cells(i, j)

End If

Next j

Next i

EndSub

'Замена отрицательных чисел диапазона A1:C2 на их модули

'Результат записывается в исходный диапазон A1:C2

Change Worksheets(4).Range("A1:C2")

'Замена отрицательных чисел диапазона A1:C2 на числа из диапазона E1:G2

'Результат записывается в исходный диапазон A1:C2

Change Worksheets(4).Range("A1:C2"), Worksheets(4).Range("E1:G2")

'Замена отрицательных чисел диапазона A1:C2 на числа из диапазона E1:G2

'Результат записывается в диапазон I1:K2

Change Worksheets(4).Range("A1:C2"), Worksheets(4).Range("E1:G2"), _ Worksheets(4).Range("I1:K2")

'Замена отрицательных чисел диапазона A1:C2 на их модули

'Результат записывается в диапазон I1:K2

Change Worksheets(4).Range("A1:C2"), , Worksheets(4).Range("I1:K2")

'Явное указание имён параметров – данный вызов процедуры аналогичен предыдущему

Change dest:=Worksheets(4).Range("I1:K2"), source:=Worksheets(4).Range("A1:C2")

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