【发布时间】:2019-07-15 23:52:31
【问题描述】:
我有这个正确返回字符串数组的 VBA UDF:
Function SplitString(ByVal Str As String, ByVal StrLen As Integer) As String()
Dim ArrStrs() As String
Dim ArrCount As Integer
ReDim ArrStrs((Len(Str) - 1) \ StrLen)
ArrCount = 0
For i = 1 To Len(Str) Step StrLen
ArrStrs(ArrCount) = Mid(Str, i, StrLen)
ArrCount = ArrCount + 1
Next
SplitString = ArrStrs
End Function
我在 Excel 表格的一个单元格中使用了上述函数,比如单元格A1
=SplitString("wordexample";2)
哪个显示
并且,通过进入单元格的编辑模式并点击F9,它会显示
现在,我想将A1 的内容作为名为@987654329@ 的参数传递给另一个UDF。
我尝试了这些和其他一些:
Function MyFunct(ArrayOfStrs As Variant, ParamArray CStrs() As Variant)
'Using Function MyFunct(ArrayOfStrs As String, ParamArray CStrs() As Variant) I get #VALUE! error
MsgBox ArrayOfStrs(1) 'returns "wo"
'MsgBox ArrayOfStrs(2) returns ""
'MsgBox ArrayOfStrs(...) returns ""
End Function
但我无法将ArrayOfStrs 作为字符串数组。也就是说,似乎只有先前拆分的字符串的第一个值(wo)被传递给MyFunct。事实上,只有ArrayOfStrs(1) 有效(它返回wo)和其他值(rd、ex、am、pl 和e)似乎在ArrayOfStrs 中不可用.
如何正确地将ArrayOfStrs 作为函数参数传递给MyFunct?
【问题讨论】:
-
除了
MyFunct函数头之外,还有助于展示一个实际传递数组的示例。 -
@AAA 我无法从
MyFunct中调用SplitString。 -
@TimWilliams 是否可以从
SplitString返回完整数组以填充A1单元格?如果是这样,如何做到这一点? BTW 为什么A1只包含第一个元素? -
一个单元格只能有一个值 = 即使您输入(例如)
={"one","two"},它也只会显示“一个”,而TypeName(Selection.Value)将是“字符串”。您必须执行类似返回单个分隔值的操作,然后该值可能是Split()inMyFunct
标签: arrays excel vba arguments