Основы офисного программирования и язык VBA


Пример 9.2


Public Function IsMedianaForAll(Cand As Variant, ParamArray M() As Variant) As Integer

'Эта функция осуществляет те же вычисления, что и функция IsMediana

'Важное отличие состоит в том, что аргумент M может быть задан сложным объектом

'Range как объединение массивов.

Dim i As Integer, j As Integer

Dim Pos As Integer, Neg As Integer

Pos = 0: Neg = 0

Dim Elem As Variant

'Теперь M - это массив параметров, а Elem - его элемент.

For Each Elem In M

'Анализ типа параметра Elem

If TypeName(Elem) = "Range" Then

For i = 1 To Elem.Rows.Count

For j = 1 To Elem.Columns.Count

If Elem.Cells(i, j) > Cand Then

Pos = Pos + 1

ElseIf Elem.Cells(i, j) < Cand Then

Neg = Neg + 1

End If

Next j

Next i

ElseIf TypeName(Elem) = "Variant()" Then

'TypeName is "Variant()"

'Это массив, но не совсем настоящий, для него не определены,

'например, функции границ: LBound, UBound.

Dim Val As Variant

For Each Val In Elem

If Val > Cand Then

Pos = Pos + 1

ElseIf Val < Cand Then

Neg = Neg + 1

End If

Next Val

ElseIf TypeName(Elem) = "Integer()" Then

'Это настоящий массив целых VBA, для которого

'определены функции границ.

For i = LBound(Elem) To UBound(Elem)

If Elem(i) > Cand Then

Pos = Pos + 1

ElseIf Elem(i) < Cand Then

Neg = Neg + 1

End If

Next i

Else

MsgBox ("При вызове IsMedianaForAll один из аргументов" _

& "не является массивом или объектом Range!")

End If

Next Elem

IsMedianaForAll = Pos - Neg

End Function




Начало  Назад  Вперед



Книжный магазин