「Excel VBA Word 開いてるファイル 書き込む」
といった検索キーワードで時折アクセスがあります。
開いているWord文書の先頭に書き込むサンプル
Word文書が開かれている状態で以下のSubプロシージャを実行すると、アクティブなワークシートのA1セルの値が、Word文書の先頭に書き出されます。
On Error GoTo ErrHandl
With GetObject(Class:="Word.Application")
.ActiveDocument.Range(0, 0).Text _
= Range("A1").Value
End With
Exit Sub
ErrHandl:
Select Case Err.Number
Case 429
MsgBox "Wordが起動していないようです。"
Case 4248
MsgBox "Wordファイルが開かれていないようです。"
Case Else
MsgBox Err.Description & vbCrLf & Err.Number
End Select
Err.Clear
起動済みのWordへの参照を、VBAのGetObject関数で取得しておいてから、
With GetObject(Class:="Word.Application")
WordのActiveDocumentの先頭に、
.ActiveDocument.Range(0, 0).Text _
ExcelのアクティブシートのA1セルの値を書き込んでいます。
= Range("A1").Value
一応、Excel VBAのコードではありますが、かなりの部分がWord VBAと言ったほうがいいコードです。
『Excel VBAユーザーのためのWord VBA入門(1)』の「3-2. Document.RangeメソッドでRangeを取得する」で、解説している「ActiveDocument.Range(0, 0)」で、文書の先頭を表すRangeオブジェクトを取得して、
.ActiveDocument.Range(0, 0).Text _
「3-4. Rangeの特徴的なプロパティ」で解説しているRange.Textプロパティで、文書先頭の文字列へ書き込むようにしています。
.ActiveDocument.Range(0, 0).Text _
書き込みたいデータを指定している「Range("A1").Value」は、純粋なExcel VBAのコードです。
= Range("A1").Value
開いているWord文書の末尾に書き込む場合
先ほどの、
With GetObject(Class:="Word.Application")
.ActiveDocument.Range(0, 0).Text _
= Range("A1").Value
End With
の部分を、以下のように変更すれば、Word文書の末尾に書き出みが行われます。
.ActiveDocument.Bookmarks("\EndOfDoc").Range.Text _
= Range("A1").Value
End With
違いは、
.ActiveDocument.Range(0, 0).Text _
だった部分が、
.ActiveDocument.Bookmarks("\EndOfDoc").Range.Text _
となっている点です。
拙著の「8-1. アクティブページを表すRangeを取得」で解説しているBookmarksコレクションのItemメソッドに、定義済みブックマーク「\EndOfDoc」を指定することで、文書末尾を表すBookmarkオブジェクトを取得して、Bookmark.Rangeプロパティで、文書末尾を表すRangeオブジェクトを取得しています。
- 『Excel VBAユーザーのためのWord VBA入門(1)』出ました。
- 『Word VBA入門』に登場するオブジェクトごとのプロパティ一覧
- 『Word VBA入門』に登場するオブジェクトごとのメソッド一覧
最終更新日時:2022-01-26 15:04
Home » エクセルマクロ・Excel VBAの使い方 » Office連携 » Excel VBAで開いているWord文書に書き込みたい