在字符串中查找多个文本

时间:2019-05-17 08:03:44

标签: vba

我想检查给定文本中是否有几个字符串之一。 例如在我的文字中“中止”或“停止”或“等待”,然后执行一些操作。

如果我使用多个elseif,那怎么办?但是我想要一个更苗条,更优雅的代码

两个潜艇都在工作

Public Sub worksfine1(strText As String)
strText = LCase(strText)

If InStr(strText, "go") > 1 Then
        Call DoStuff1(strText)
    ElseIf InStr(strText, "wait") > 1 Then
        Call DoStuff2(strText)
    ElseIf InStr(strText, "stop") > 1 Then
        Call DoStuff2(strText)
    ElseIf InStr(strText, "halt") > 1 Then
        Call DoStuff2(strText)
End If
End Sub

Public Sub worksfine2(strText As String)
strText = LCase(strText)

If InStr(strText, "go") > 1 Then
        Call DoStuff1(strText)
    ElseIf InStr(strText, "wait") > 1 Or InStr(strText, "stop") > 1 Or InStr(strText, "halt") > 1 Then
        Call DoStuff2(strText)
End If
End Sub

我想要的是

...
ElseIf InStr(strText, "wait",  "stop", "halt") > 1 Then
        Call DoStuff2(strText)
...

有没有简单的方法,还是我必须使用上面的代码?

1 个答案:

答案 0 :(得分:1)

VBA中没有内置功能,但是您可以创建自己的功能。这将清理您的worksfine1函数-对于这个小例子来说可能不是那么有用,但是如果您有几条这样的检查。

尝试

Public Sub worksfine1(strText As String)
    strText = LCase(strText)

    If MyInStr(strText, "go") Then
        Call DoStuff2(strText)
    ElseIf MyInStr(strText, Array("wait", "stop", "halt")) Then
        Call DoStuff2(strText)
    End If
End Sub

Function MyInStr(text As String, words) As Boolean
    Dim i As Long
    If IsArray(words) Then
        For i = LBound(words) To UBound(words)
            If InStr(text, words(i)) > 0 Then
                MyInStr = True
                Exit Function
            End If
        Next i
    Else
        MyInStr = (InStr(text, words) > 0)
    End If
End Function

请注意,您可以使用单词数组或单个单词来调用该函数,并且该函数将返回Boolean,而不是Integer