Поиск нескольких текстов в строке - PullRequest
0 голосов
/ 17 мая 2019

Я хочу проверить, есть ли в данном тексте одна из нескольких строк.например, ist "halt" ИЛИ "Stop" или "Wait" в моем тексте, затем сделайте что-нибудь.

Что работает, если я использую несколько 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 Ответ

1 голос
/ 17 мая 2019

В 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...