Excel VBA:无法将字符串数组传递给Function

时间:2015-07-28 09:32:01

标签: vba

VBA初学者。

我正在尝试将一个字符串数组从子例程传递给一个函数,然后该函数将修改数组中的每个字符串。但是,我收到“Type:array或user-defined type expected”错误消息。

我尝试为数组重新定义不同的数据类型,以便与函数中输入的数据类型对齐,但​​无济于事。

希望你能帮忙!你太了解了!

下面是虚拟代码:

Sub text()
    Dim haha() As Variant

    haha = Array("Tom", "Mary", "Adam")
    testing (haha())
    MsgBox Join(haha, " ")

End Sub

Function testing(ByRef check() As String) As String()
    Dim track As Long

    For track = LBound(check) To UBound(check)
        check(track) = check(track) & " OMG"
    Next
End Function

3 个答案:

答案 0 :(得分:1)

在orignial代码中,字符串不是同一个变体(我相信它们都需要变体?有人可以验证),测试后你不需要括号,只要你设置另一个值就需要括号,例如< / p>

haha2 = testing(haha())

下面的代码应该没问题

Sub text()
Dim haha()
haha = Array("Tom", "Mary", "Adam")
testing haha()
MsgBox Join(haha, " ")

End Sub

Function testing(ByRef check()) As String
Dim track As Long
For track = LBound(check) To UBound(check)
    check(track) = check(track) & " OMG"
Next
End Function

答案 1 :(得分:1)

您的代码中有一些错误:

  • 有两种方法可以调用方法:

    1)使用Call关键字 - 在这种情况下,您必须在括号中提供所有参数:

    Call testing(haha)

    2)没有Call关键字 - 在这种情况下,您只需在函数名称后面提供参数:

    testing haha

    在您的代码中,您将两者结合起来,这是语法错误。

  • 如果您将数组作为参数传递给函数,则不需要像这样放置括号:testing (haha())

    正确的语法是:

    testing(haha)

  • 函数testing需要String类型的数组作为参数,不能传递其他类型的对象,因为它会导致编译错误类型不匹配。目前您正在尝试传递haha类型的变量Variant

  • 您可以将haha变量的类型更改为字符串数组(以避免上述错误):

    Dim haha() As String
    

    但是,在这种情况下,您无法为其分配函数Array的值,因为此函数的结果为Variant类型。 您必须替换此代码:

    haha = Array("Tom", "Mary", "Adam")
    

    用这个:

    ReDim haha(1 To 3)
    haha(1) = "Tom"
    haha(2) = "Mary"
    haha(3) = "Adam"
    

答案 2 :(得分:0)

一些改进代码的建议:

Dim haha() As String

您可以定义数组中条目的类型,而不是数组本身。使用mielk提到的方式来填充数组。

Function Testing(byref check as variant) As String

这将避免未定义变量的问题。不清楚为什么你觉得函数应该返回一个字符串。甚至可能转换为Sub。