none
VB2008でword文書を文字列検索し、その頁、行を取得したい RRS feed

  • 質問

  • いつもお世話になっております。

    Word文書(2010)を開き、指定された文字列を検索し、

    その行、頁位置を取得したいのですが、Word VBAでは

    以下のコードで可能でしたが、VB.NET2008ではどのようにしたら

    良いのでしょうか?

    Sub 文字列検索位置取得()
        Dim myRange As Range
        Dim mySearch As String
        Dim a As Long, b As Long
        mySearch = InputBox("探す文字を入力してください", "検索")
        If mySearch = "" Then Exit Sub
        Selection.GoTo What:=wdGoToPage, Which:=wdGoToFirst, Count:=1
        Selection.Find.ClearFormatting
      
        With Selection.Find
          '以下を省略すると誤動作が出る可能性があります。
          '必要ならオプションを入れてください。
            .Text = mySearch
            .Forward = True
            .Wrap = wdFindContinue
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchByte = False
            .MatchAllWordForms = False
            .MatchSoundsLike = False
            .MatchWildcards = False
            .MatchFuzzy = False
        End With
        Selection.Find.Execute
        Set myRange = Selection.Range
        With myRange
            '行
            a = .Information(wdFirstCharacterLineNumber)
            '桁
            b = .Information(wdFirstCharacterColumnNumber)
            '頁
            c = .Information(wdActiveEndPageNumber)
        End With
        MsgBox c & " 頁 " & a & " 行 " & b & " 桁"
    End Sub

    2013年7月12日 6:45

回答

  • 自己回答となってしまいましたが、解決したのでソースコードを

    下記に示します。

    どうもありがとうございました。

                    'カーソルを文書先頭に戻す。
                    wordObj.Selection.GoTo(What:=1, Which:=1, Count:=1)
                    wordObj.Selection.Find.ClearFormatting()
                    With wordObj.Selection.Find
                        .Text = tmp
                        .Forward = True
                        .Format = True
                        .MatchCase = False
                        .MatchFuzzy = False
                    End With
                    If wordObj.Selection.Find.Execute() Then
                        '検索ヒット
                        yourRange = wordObj.Selection.Range()
                        With yourRange
                            '行
                            ln = wordObj.Selection.Information(Microsoft.Office.Interop.Word.WdInformation.wdFirstCharacterLineNumber)
                            pn = wordObj.Selection.Information(Microsoft.Office.Interop.Word.WdInformation.wdActiveEndPageNumber)
                        End With
                        'MsgBox("Word=" & tmp & " Page=" & pn & " Line=" & ln)
                        tmp = "P" & pn & "-" & ln
                        Sheet.Cells(J, i + adjust).Value = tmp
                    Else
                        '検索ヒットせず
                        'MsgBox("Not Found=" & tmp)
                        Sheet.Cells(J, i + adjust).Value = "-"
                    End If
    

    ありがとうございました。

    • 回答としてマーク MitsuoTAKEI 2013年7月24日 6:00
    2013年7月24日 6:00