前回は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
コメント