【问题标题】:Create an array of strings to be sent as argument to a function that accepts a string创建一个字符串数组,作为参数发送给接受字符串的函数
【发布时间】:2019-03-19 01:00:50
【问题描述】:

我试图弄清楚如何声明和使用字符串数组。我到处都看到建议是使用类型变体的数组。为什么我不能创建一个只有字符串的数组?

我有一个接收字符串作为参数的函数,我需要使用 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 参数类型不匹配

【问题讨论】:

    标签: arrays excel vba string


    【解决方案1】:

    上述建议的替代方案:

    调用同一个函数 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
    

    【讨论】:

      【解决方案2】:

      除了一些语法错误之外,您通过引用需要字符串的函数来传递变体类型。

      这可以通过强制 VBA 将表达式转换为字符串来克服:

      Sub Button1_Click()
      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
      
      End Sub
      
      Function MyFunction(str As String) As Integer
      Debug.Print str
      End Function
      

      通过在要传递的参数周围放置一组额外的括号。

      参考:

      【讨论】:

        猜你喜欢
        • 2011-12-27
        • 1970-01-01
        • 2021-02-16
        • 1970-01-01
        • 2016-07-18
        • 1970-01-01
        • 1970-01-01
        • 2017-05-03
        • 1970-01-01
        相关资源
        最近更新 更多