Flush bad karma from Word's find facility after an unsuccessful wildcard search
Article contributed by Bill Coan
There is a bug in Word that means any Find or Find or Replace operation in VBA that follows an unsuccessful wildcard search may sometimes fail. The following code fixes this problem.
Sub WildcardSearch()
Dim myWorkingRange As Range
Set myWorkingRange = ActiveDocument.Range
'call a routine that removes any previous settings from the find dialog
Call ClearFindAndReplaceParameters
myWorkingRange.Find.Execute FindText:= "[!^013]" , _
MatchWildcards:= True , Forward:= True
'exit sub if search is successful
If myWorkingRange.Find.Found Then
MsgBox "tell the user something"
Call ClearFindAndReplaceParameters
Exit Sub
End If
'this is a dummy search because otherwise
'subsequent searches will break down
'somehow this search flushes the bad karma
'and lets subsequent searches function
myWorkingRange.Find.Execute FindText:= "^p" , _
MatchWildcards:= False
'call a routine that removes all settings from the find dialog
'so future users of the dialog won't get strange results
Call ClearFindAndReplaceParameters
End Sub
Sub ClearFindAndReplaceParameters()
With Selection.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = ""
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindStop
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
End Sub
Note: There is no simple way to reproduce this bug. In a macro that makes dozens of wildcard searches, the bug will eventually manifest itself, but I don't know of a way to force the bug to appear. The good news is that if you use the above workaround, the bug will never appear.