以前紹介した「カーソル位置より前に同じ文字列が記載されているか調べるWordマクロ」の続編です。
使っていてちょっと不便だった点を改良しました。
<目次>
改良点
文字列を検索している最中に、検索処理を中止して、現在選択されている文字列に対して処理を行うことができる前回のバージョンでは、カーソル位置よりも前に同じ文字列があるかどうかを確認するだけでした。
同じ文字列があったことを確認できた場合でも、その文字列を操作したりできませんでした。
つまり、「眺めているだけ」の状態だったんですね。
マクロの解説
キャンセルボタンを追加しました。
キャンセルボタンをクリックするか、キーボードの[Esc]をおすと、検索処理から抜け出すことができます。
そして、現在選択されている文字列が表示されます。
マクロ
Sub Antecedent_Search() Dim myRange As Range Dim Msg, Style, Title, Response As String Dim SS, SE As Long Dim FoundBln As Boolean SS = Selection.Start SE = Selection.End FoundBln = False '文字列が選択されていない場合には終了 If SS = SE Then End '表示される言葉の設定 Msg = "次を検索しますか?" Style = vbYesNoCancel + vbQuestion + vbDefaultButton2 Title = "検索結果" Set myRange = ActiveDocument.Range(0, 0) With myRange.Find .Wrap = wdFindStop .Execute findText:=Selection.Text Do While .Found = True If myRange.Start <> SS Then FoundBln = True myRange.Select Response = MsgBox(Msg, Style, Title) If Response = vbYes Then myRange.Collapse Direction:=wdCollapseEnd .Execute ElseIf Response = vbCancel Then myRange.Select GoTo Proc_End ElseIf Response = vbNo Then Exit Do End If Else If FoundBln = False Then MsgBox "見つかりませんでした。" Selection.Collapse Direction:=wdCollapseEnd End Else MsgBox "これ以上見つかりませんでした。" Exit Do End If End If Loop End With Set myRange = ActiveDocument.Range(SS, SS) With myRange.Find .Wrap = wdFindStop .Execute findText:=Selection.Text End With myRange.Select Selection.Collapse Direction:=wdCollapseEnd Proc_End: Set myRange = Nothing End Sub