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
答案 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。