【Word VBA】カーソル位置より前に同じ文字列が記載されているか調べるWordマクロ(その2)

2010年6月25日

以前紹介した「カーソル位置より前に同じ文字列が記載されているか調べる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

関連記事

カーソル位置より前に同じ文字列が記載されているか調べるWordマクロ

-コード
-,