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          

« ♪耳コピー(■けいおん!!|天使にふれたよ!) | トップページ | ▲VBScript(複数のIEを一気に終了する) »

2010年10月30日 (土)

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

Word VBAネタは久しぶりです。
今、Excel VBAからWord VBAを操作して、Word文書の情報をExcelに貼り付けるマクロを作成しています。
Word VBAで文字列を検索してその文字列を選択状態にする方法はネットにたくさん紹介されていますが、
その検索文字列が存在する行全体を選択する方法が見つかりません。
例えば、”平成22年度~”と記述されている文を探し出して選択したい場合、”年度”で検索するといった
ケースです。
Word VBAで実行するとうまくいくのにExcel VBAからWord VBAを実行するとうまくいかない。
いろいろ試行錯誤をしてやっとできました。同じような箇所で悩んでいる方は参考にしてみてください。
同じロジックにしてもよいのですが敢えて2通り記載しました。
ExcelからWord VBAを操作するポイントは、Wordオブジェクトを生成する点、wdExtendなどの固定値は
実際の数値に変換する点、Word VBAでは.Executeを実行すると検索文字列に飛んで選択してくれますが
なぜかExcel VBAではそれだけではだめで、myRng.Selectなどselectしてやる必要がある点(これを発見
したときは久しぶりに感動しました)です。検索を繰り返す場合は、IF文をDo WhileにしてやればOKです。
お試しあれ。

■Word VBAから実行する場合
Sub test1()
    With Selection.Find
        .Forward = True
        .ClearFormatting
        .MatchWholeWord = True
        .MatchCase = False
        .Wrap = wdFindContinue

        if .Execute(FindText:="年度", Forward:=True, Format:=True) = True then
            Selection.HomeKey Unit:=wdLine, Extend:=wdMove
            Selection.EndKey Unit:=wdLine, Extend:=wdExtend
            lVal = Selection
        end if
        MsgBox lVal
    End With

    ' findのフォーマット
    Selection.Find.ClearFormatting
End Sub

■Excel VBAからWord VBAを実行する場合
Sub test2()
    Set objWord = CreateObject("Word.Application")
    Set objDoc = objWord.Documents.Open("C:\報告書.doc")
    objWord.Visible = True
   
    lFindVal = "年度"
    Set myRng = objDoc.Content
    myRng.Find.ClearFormatting
    myRng.Find.Execute findtext:=lFindVal, Forward:=True
    If myRng.Find.found = True Then
        myRng.Select
        objWord.Selection.HomeKey Unit:=5, Extend:=0
        objWord.Selection.EndKey Unit:=5, Extend:=1
        lVal = objWord.Selection
    End If
    MsgBox lVal
   
    Set myRng = Nothing
    Set objDoc = Nothing
    Set objWord = Nothing
   
End Sub

« ♪耳コピー(■けいおん!!|天使にふれたよ!) | トップページ | ▲VBScript(複数のIEを一気に終了する) »

パソコン・インターネット」カテゴリの記事

コメント

はじめまして。
VBAのサンプルを探していて個々にたどり着きました。

例に上げられているifの部分をDo whileに変更せよとのことですが、そのままDo whileに置き換え、文の最後にループを置くと永久ループを起こしてしまいます。

まったく無知なので色々調べましたが解決できませんでした。
Dowhileに置き換える場合の例を教示して頂けませんでしょうか。

よろしくお願いします。

かもねぎさん
こんばんは、平陽凛です。
Do Loop文で繰り返しの処理にしてみました。
最新記事をご確認ください。

コメントを書く

(ウェブ上には掲載しません)

« ♪耳コピー(■けいおん!!|天使にふれたよ!) | トップページ | ▲VBScript(複数のIEを一気に終了する) »