Vba 函数返回数组

Vba 函数返回数组,vba,excel,type-mismatch,Vba,Excel,Type Mismatch,我想在单词“and”后分隔字符串。我经常这样做,我写下面的函数 Public Function find(separate_text) As Variant Dim i As Integer Dim text As String text = CStr(separate_text) ReDim returned(InStr(text, "and") To Len(CStr(text))) As Variant For i = InStr(CStr(text), "and") To L

我想在单词“and”后分隔字符串。我经常这样做,我写下面的函数

Public Function find(separate_text) As Variant
 Dim i As Integer
 Dim text As String
 text = CStr(separate_text)
 ReDim returned(InStr(text, "and") To Len(CStr(text))) As Variant

 For i = InStr(CStr(text), "and") To Len(CStr(text)) - 4
     returned(i) = Mid(text, i + 4, 1)
 Next i
 find = returned
End Function
当我想叫它的时候:

MsgBox CStr(find(example))

原因13错误(不匹配)。哪里出了问题?

试试这个。如果要返回单独_文本的第一部分,请在第三行中返回splittext(0)

Public Function MyFind(separate_text As String) As String

splittext = Split(separate_text, "and")

MyFind = LTrim(splittext(1))

End Function

为什么需要返回数组?你只想在“和”后面加上字符串吗?您尚未声明
返回了
,因此无法对其进行重拨,您返回的是
查找攻击
,而不是
查找
。将
选项显式
添加到您的代码中,这样您就可以识别大部分问题。@Tim即使使用
选项显式
,您也可以重拨未声明的变量。否则,你会发现。使用选项explicit会提醒OP将返回值分配给
find_atacks
而不是
find
,可能存在差异。但是,我仍然希望出现错误,因为返回的
是一个变量数组,不能强制为字符串。@DavidZemens-当然是。我应该经常测试我的假设。如果
find()
确实返回数组,Kulis可以执行
MsgBox Join(find(示例),vbCrLf))
-数组中的每个元素在MsgBox中的单独一行上。如果字符串不包含“and”,则会导致错误。如何更改此代码以防止出现这种情况?请阅读拆分函数。您需要一个标记来告诉split函数在哪里拆分字符串。在上面的示例中,“and”是该标记。你可以用任何你想要的东西来代替它。如果字符串没有“and”,它显然不起作用。我使用:
if InStr(separate_text,“and”)>1然后