2017年7月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          

« 2011年12月 | トップページ | 2012年4月 »

2012年2月11日 (土)

■Word VBA(検索文字列の行を選択 その2)

久しぶりのWord VBAネタです。「検索文字列の行を選択」記事で、繰り返し実行するにはどうすればよいでしょうかという問い合わせをいただきました。
Ifの部分をDo whileにすればよいと書きましたが、実際にやってみると結構変更する部分があったので以下の通り作成しました。サクっと作ったので変なロジックですがとりあえず動くので良しとします。
前回はExcelから操作するケースも作りましたが今回は割愛します。
Do Loopで無限ループしますが、処理の中で最初の検索位置に戻ったらループを抜けるようしました。
それと、検索文字を含む行全体を選択するロジックでしたが、今回はわざと検索文字のみを選択するようにしてあります。これは、一行の中に、検索文字が複数存在する場合に一行選択してしまうと最初の検索文字しか検索しないからです。それでも構わない場合は、コメント部分を外せば良いです。

Sub test1()
    lmoji = InputBox("検索する文字を入力してください。", "検索文字入力", "年度")
    If lmoji = "" Then End
   
    Do
        With Selection.Find
            .Forward = True
            .ClearFormatting
            .MatchWholeWord = True
            .MatchCase = False
            .Wrap = wdFindContinue
   
            If .Execute(FindText:=lmoji, Forward:=True, Format:=True) = True Then
                '位置取得
                Set myRange = Selection.Range
                With myRange
                    '行
                    aa = .Information(wdFirstCharacterLineNumber)
                    '桁
                    bb = .Information(wdFirstCharacterColumnNumber)
                    '頁
                    pp = .Information(wdActiveEndPageNumber)
                End With
            
                '一行選択
'                Selection.HomeKey unit:=wdLine, Extend:=wdMove
'                Selection.EndKey unit:=wdLine, Extend:=wdExtend
                lVal = Selection
            End If

            If a = aa And b = bb And p = pp Then Exit Do
            MsgBox lVal & ": " & aa & " 行 " & bb & " 桁  " & pp & " 頁"
            
            
            If a = "" Then a = aa
            If b = "" Then b = bb
            If p = "" Then p = pp
            
            .Parent.Move Count:=2
            
        End With
    Loop

    Selection.Find.ClearFormatting
    Set myRange = Nothing
End Sub

« 2011年12月 | トップページ | 2012年4月 »