忍者ブログ

VB.NET-TIPS などプログラミングについて

VB.NETのTIPS(小技集)を中心に、Javascript、PHP その他のプログラミングについて少し役に立つ情報を発信します。いわゆる個人的な忘備録ですが、みなさんのお役に立てれば幸いです。

access vba Bookmarkオブジェクトで文書の先頭にカーソルを移動する(Word処理用クラスに文書の先頭移動関数を追加)

前回はWord文書の中で文字列を検索しその部分を指定された文字列で置き換える処理を作成しましたが、 カーソルの位置が最後の置換処理を行った場所に移動します。

access vba でのWord文書の文字列検索と置換について(Word処理用クラスに文字列置換関数を追加)

これでは文書の途中にカーソルがありますので、文書の先頭が見たい場合には都合が悪いので、カーソルを先頭に移動する関数を作成します。
カーソルの移動には Bookmark オブジェクトを利用します。 このオブジェクトには以下の様に定義済みのものがありますのでこれを利用します。

Bookmark説明
\Sel 現在の選択範囲またはカーソル位置
\PrevSel1 最後に編集を行った範囲
\PrevSel2 2個前に編集を行った範囲
\StartOfSel 現在の選択範囲の開始位置
\EndOfSel 現在の選択範囲の終了位置
\Line 現在の行または現在の選択範囲の最初の行
\Char 現在の文字。範囲が選択されていない場合はカーソルの右側の文字、また範囲が選択されている場合はその範囲の先頭文字を指します
\Para カーソルのある段落か、複数の段落を選択すると、選択範囲の最初の段落
\Section 現在のカーソルのあるセクションか、選択範囲に複数のセクションが含まれている場合、最初のセクション
\Doc 作業中の文書全体
\Page 現在のページ
\StartOfDoc 文書の先頭
\EndOfDoc 文書の末尾
\Cell テーブル内の現在のセル、複数のセルが選択されている場合は先頭のセル
\Table 現在のテーブル、複数のテーブルが選択されている場合は先頭テーブル


この Bookmark オブジェクトに \StartOfDoc を指定し、そのオブジェクトを選択することでカーソル移動が行えます。 関数としては以下の通りで、特に難しくはありません。
尚、 Range オブジェクトを使ってもできます。

Word文書カーソル先頭移動関数

'******************************************************************************
' Word文書・カーソル先頭移動
'******************************************************************************
' 関数名 : WordMoveToTop()
'******************************************************************************
Public Sub WordMoveToTop()
    On Error GoTo Err_WordMoveToTop
    
    'カーソル先頭移動
    WordDoc.Bookmarks("\StartOfDoc").Select
    '以下の方法でもOK
    'WordDoc.Range(0, 0).Select

Exit_WordMoveToTop:
    Exit Sub

Err_WordMoveToTop:
    MsgBox Err.Description
    Resume Exit_WordMoveToTop
End Sub

この関数をWord処理用クラスに追加して、それを使用する例として、access フォームに1個のボタンのみを設置し、そのクリックイベントでワード文書を開く様にしてみます。

Word文書文字列置換関数の使用例

Option Compare Database

' クラスWordオブジェクト
Private mclsWord As clsWord

'------------------------------------------------------------------------------
' フォームロード時イベント
'------------------------------------------------------------------------------
Private Sub Form_Load()
    Set mclsWord = New clsWord
End Sub

'------------------------------------------------------------------------------
' フォームクローズイベント
'------------------------------------------------------------------------------
Private Sub Form_Close()
    'ワードクローズ
    mclsWord.WordClose
    'Wordオブジェクト解放
    Set mclsWord = Nothing
End Sub

'------------------------------------------------------------------------------
' コマンド1開始
'------------------------------------------------------------------------------
Private Sub コマンド1_Click()
    Dim strPath As String
    'ワードファイルを読み込み、文章を編集する状態にする
    strPath = Application.CurrentProject.path & "\" & "find-test.docx"
    'ワードファイルを読込み編集状態で表示する
    mclsWord.WordOpen strPath, True
    '
    Dim arrVaKey() As Variant
    Dim arrVaVal() As Variant

    arrVaKey = Array("@test1@", _
                     "@test2@", _
                     "@test3@", _
                     "@test4@")
    arrVaVal = Array("テスト1", _
                     "テスト2", _
                     "テスト3", _
                     "テスト4-1" & vbCrLf & "テスト4-2" & vbCrLf & "テスト4-3")
    '置換処理(左揃えを行わない)
    mclsWord.WordReplace arrVaKey, arrVaVal, False
    
    arrVaKey = Array("@test5@")
    arrVaVal = Array("テスト5-1" & vbCrLf & "テスト5-2" & vbCrLf & "テスト5-3")
    '置換処理(左揃えを行う)
    mclsWord.WordReplace arrVaKey, arrVaVal, True
    '先頭へ移動
    mclsWord.WordMoveToTop
End Sub


「コマンド1開始」を押下することで、ワードが起動し置換処理の結果が表示され、カーソルが先頭に移動していることが分かります。



関連する記事

access vba でWordを起動しファイル保存時のファイル名変更について(DocumentBeforeSave : Word保存前イベント)
access vba でExcelを起動しファイル保存でのファイル名変更について(WorkbookBeforeSave : Excel保存前イベント)
access vba でのWord処理用クラスの作成(ファイル保存時イベント[DocumentBeforeSave]でのファイル名変更処理を含む)
access vba でのWord文書の文字列検索と置換について(Word処理用クラスに文字列置換関数を追加)











PR

コメント

コメントを書く