2016-10-31 293 views
0

我是VBA編程的初學者,我遇到了使用子字符串搜索在字符串中查找一個或多個關鍵字的問題。在VBA中使用InStr函數進行多字符串搜索 - 已修改

我在這個論壇上的答案已被幫助,但代碼將搜索限制在字符串中的第一個單詞而不是整個字符串。在答案中指出:「記住開始與含有不同。」

我試圖通過更改使用「StringStarts」到「Contains」的代碼部分來修改代碼,但這不會改變事情。

最初的答案上找到: Multiple string search with InStr function in VBA

的代碼如下:

"If StringStarts(Me.gname.Value, "Mr", "Mrs", "Dr", "Supreme Commander", "Capt.") Then 
    MsgBox "Consumer Name Starts with Mr./Mrs./Ms./Dr. Check Consumer Name" 

... 

Function StringStarts(strCheck As String, ParamArray anyOf()) As Boolean 
    Dim item As Long 
    For item = 0 To UBound(anyOf) 
     If InStr(1, strCheck, anyOf(item), vbTextCompare) = 1 Then 
      StringStarts = True 
      Exit Function 
     End If 
    Next 
End Function" 

這是我的第一個問題貼出來,所以我希望我一直在下面的約定要求。

+0

你的問題不是很清楚..你想能夠搜索字符串中的任何位置的關鍵字*嗎?或者你想找到字符串中的所有關鍵字(而不是隻停留在第一個匹配的關鍵字)? – NavkarJ

+0

你說得對。我實際上希望能夠確定是否沒有任何關鍵字,關鍵字之一以及關鍵字是否出現過一次以上。 –

回答

1

StringContains()函數返回多少通過anyOf陣列傳遞的字符串包含作爲參數傳遞的第一個字符串中:

Function StringContains2(strCheck As String, ParamArray anyOf()) As Long 
    Dim item As Long 
    For item = 0 To UBound(anyOf) 
     If InStr(1, strCheck, anyOf(item), vbTextCompare) = 0 Then Exit For 
    Next 
    StringContains2 = item 
End Function 

像使用:

Sub main() 
    Dim msg As String, strng As String 

    strng = Me.gname.Value 
    Select Case StringContains2(strng, "Mr", "Mrs", "Dr", "Supreme Commander", "Capt.") 
     Case 0 
      msg = "there was no keyword in the string" 
     Case Is > 1 
      msg = "there were two or more keywords in the string" 
    End Select   
    If msg <> "" Then MsgBox msg, vbCritical  
End Sub 
+0

非常感謝!它按我最初的意圖工作。然而,看起來,我的問題並不太清楚。 從用戶NvJ的問題,我意識到我需要確定是否沒有任何關鍵字,關鍵字之一以及關鍵字是否出現一次以上。正如我向用戶「Nvj」澄清了我的問題,我認爲他會回答這個問題? (我不想讓兩個人上班) –

+0

查看編輯答案 – user3598756

+0

嗨, 感謝您的回覆。 我沒有解釋清楚和正確的問題和問題。 我想要做的是: 1.如果字符串中沒有關鍵字,則顯示一條特定的錯誤消息。 2.如果字符串中有兩個或多個關鍵字,則顯示另一個錯誤消息。 因此,我想阻止關鍵字根本不出現,並防止關鍵字出現多次。 我很抱歉不太清楚。 Christian –