我想检查给定文本中是否有几个字符串之一。 例如在我的文字中“中止”或“停止”或“等待”,然后执行一些操作。
如果我使用多个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)
...
有没有简单的方法,还是我必须使用上面的代码?
答案 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