Передать массив как список в ParamArray - PullRequest
0 голосов
/ 12 февраля 2020

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

Упрощенный пример для дальнейшего объяснения моего вопроса:

Sub DoSomething()
    Dim MyArray(3) As Variant
    MyArray(0) = "A"
    MyArray(1) = "Whatever"
    MyArray(2) = 2
    MyArray(3) = "xyz"

    'Now I want this...
    SomeNativeFunction MyArray

    '...to act the same way like this:
    SomeNativeFunction MyArray(0), MyArray(1), MyArray(2), MyArray(3)

    '... because at this point I don't know how many elements MyArray actually might contain during runtime, so my only chance by now is something like this:
    Select UBound(MyArray)
        Case 1
            SomeNativeFunction MyArray(0)
        Case 2
            SomeNativeFunction MyArray(0), MyArray(1)
        Case 3
            SomeNativeFunction MyArray(0), MyArray(1), MyArray(2)
        Case .....
        Case 99999
            SomeNativeFunction MyArray(0), MyArray(1), MyArray(2), MyArray(...)
    End Select
End Sub

Function SomeNativeFunction (ParamArray args() As Variant)
    'can't touch this...
End Function

Способ, которым я сначала вызываю SomeNativeFunction в приведенном выше примере MyArray, будет переведен в позицию 0 в args, поэтому args(0) = MyArray. Но вместо этого мне нужно args(0) = MyArray(0), args(1) = MyArray(1), et c .., как я это сделал во втором вызове функции. Проблема в том, что MyArray может иметь различное количество параметров, поэтому жесткое кодирование на самом деле не сработает во всех случаях или, по крайней мере, станет очень грязным. или другие источники, поэтому изменить их невозможно.

...