vba создает массив строк для отправки в качестве аргумента функции, которая принимает строку - PullRequest
0 голосов
/ 14 октября 2018

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

У меня есть функция, которая получает строку в качестве аргумента, и мне нужно вызывать эту функцию 6 раз с 6 различными строками.Это похоже на ситуацию, когда лучше всего использовать массив строк и зацикливать его и каждый раз вызывать функцию с правильной строкой.Как мне объявить такой массив и получить к нему доступ?Если я объявляю массив Variant, я получаю ошибку несоответствия типов, так как мои функции ожидают строку.

Спасибо

Чтобы быть более точным, это то, что я сделал:

dim strings() as variant
dim i as integer
dim res as integer
strings = Array ("string1", "string2", "string3)

For i = LBound(strings) To UBound(strings)
   res = MyFunction( strings(i))
Next


MyFunctions(str as string) as integer
'do something
end function

При этом появляется ошибка компилятора: несоответствие типов аргументов ByRef

1 Ответ

0 голосов
/ 14 октября 2018

Альтернатива вышеприведенному предложению:

Не является проблемой вызывать одну и ту же функцию 6 раз, но если вы всегда обрабатываете массив строк, это также не помешает передать массив.

Sub subTest()

    Dim arrStrings() As String

    For i = 1 To 6
        ReDim Preserve arrStrings(1 To i)       '   Extend the array - 'preserve' retains the old values too
        arrStrings(i) = "this is string " & i
    Next i

    For Each strValue In arrStrings
        Debug.Print (strValue)                  '   Just so we see each string
    Next strValue

    Debug.Print (fncDoSomething(arrStrings))    '   Passing string array as parameter

End Sub
                                                '   Example function which counts how many characters are in your array.
Function fncDoSomething(ByRef strings() As String) As Integer    '   ByRef is important when passing an array.

    Dim intCharCount As Integer
    Dim strValue As Variant
    intCharCount = 0

    For Each strValue In strings
        intCharCount = intCharCount + Len(strValue)
    Next strValue

    fncDoSomething = intCharCount

End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...