Есть код:
- Код: Выделить всё
Private Sub Form_Load()
Call EQ("1", "2")
End Sub
Private Sub EQ(ParamArray PA())
Dim tmp
For Each tmp In PA
Action (PA)
Next tmp
End Sub
Private Function Action(ParamArray PA2()) As Variant
Dim tmp2
For Each tmp2 In PA2
MsgBox tmp2
Next tmp2
End Function
Вызывает ошибку Type Mismatch (попробуйте сами).
Решение достаточно просто создаём доп. переменную, присваиваем ей переданный массив (причём след. функцию можно вызывать как обычно (!!!), - передавая ей не tmpA, а PA):
- Код: Выделить всё
Private tmpA()
Private Sub Form_Load()
Call EQ("1", "2")
End Sub
Private Sub EQ(ParamArray PA())
Dim tmp
For Each tmp In PA
tmpA = PA
Action (tmpA)
'Всё работает, даже если вызывать
'Action (PA) (!!!)
Next tmp
End Sub
Private Function Action(ParamArray PA2()) As Variant
Dim tmp2
For Each tmp2 In tmpA
MsgBox tmp2
Next tmp2
End Function
Вопрос:
а) почему возникает ошибка
б) как избавиться от неё (если это возможно). Хотелось бы "полноценно" вызывать две вложенные функции с ParamArray (без дополнительных массивов)