Иногда, когда в процедуру следует передать только один массив, для этой цели можно использовать конструкцию ParamArray. Следующая процедура PosNeg подсчитывает суммы поступлений Positive и расходов Negative, указанные в массиве Sums:
Sub PosNeg(Positive As Integer, Negative As Integer, ParamArray Sums() As Variant) Dim I As Integer Positive = 0: Negative = 0 For I = 0 To UBound(Sums()) ' цикл по всем элементам массива If Sums(I) > 0 Then Positive = Positive + Sums(I) Else Negative = Negative - Sums(I) End If Next I End Sub
Вызов процедуры PosNeg может иметь такой вид:
Public Sub TestPosNeg() Dim Incomes As Integer, Expences As Integer
PosNeg Incomes, Expences, -20, 100, 25, -44, -23, -60, 120 Debug.Print Incomes, Expences End Sub
В результате переменная Incomes получит значение 245, а переменная Expences - 147. Заметьте, преимуществом использования массива аргументов ParamArray является возможность непосредственного перечисления элементов массива в момент вызова.
Однако такое использование массива аргументов ParamArray не исчерпывает всех его возможностей. В более сложных ситуациях передаваемые аргументы могут иметь разные типы. Мы приведем сейчас пример, в котором, во-первых, действуют объекты Office 2000, а, во-вторых, используется передача параметров через массив аргументов ParamArray.