I am checking whether a Name textbox starts with Mr. Mrs. Ms. etc.
I created a function but I am not able to compare more than one string.
Here is my code.
Pass strFind as group of strings seperated by a delimiter ex:-
FindString(LCase(Me.gname.Value), LCase("Mr;Mrs;Ms;Dr"))
Now split them and compare using a loop.
Arr = Split(strFind,";")
Flag = 0
For Each str in Arr
If InStr(strCheck, str) > 0 Then
Flag = 1
End If
Next
If Flag = 1 Then
FindString = True
Else
FindString = False
End If
Pass a list of tokens to search for using a ParamArray
and loop each looking for a match.
You can use vbTextCompare
to enforce case sensitivity.
Remember that starts with is different from contains.
'// you can pass as many prefixes as you like
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
Or better with a RegEx
to allow optional .
and not match Mruku
StringStarts(Me.gname.Value, "Mr|Mrs|Ms|Dr")
...
Function StringStarts(strCheck As String, options As String) As Boolean
With CreateObject("VBScript.RegExp")
.IgnoreCase = True
.Pattern = "^(" & options & ")\.*\b"
StringStarts = .Test(strCheck)
End With
End Function
This is my version of @AlexK great answer. While it solved the OP's original problem I wanted to share a more generalized answer for others to benefit from.
Here is how I used the Function:
Public Sub InString_Test()
Dim WS As Worksheet
Set WS = ThisWorkbook.Sheets("Sheet1")
Dim rcell As Range, rng As Range
Set rng = WS.Range("A1:A" & WS.UsedRange.Rows.Count)
For Each rcell In rng.Cells
If InStrFunc(Range(rcell.Address), "TEST", "CAT") Then
MsgBox "String Found in " & rcell.Address
End If
Next rcell
End Sub
Function InStrFunc(strCheck As String, ParamArray anyOf()) As Boolean
Dim item As Long
For item = 0 To UBound(anyOf)
If InStr(1, strCheck, anyOf(item), vbTextCompare) <> 0 Then
InStrFunc = True
Exit Function
End If
Next
End Function