エクセルVBAで使用するコードの備忘録。VBAでExcelの表をWordの指定場所に張り付けるコード。
Wordファイルを開く
Wordファイルを開くにはワードファイルを操作するためのオブジェクトを作成する必要があります。作成する際のコードの書き方は参照設定を使う場合とそうでない場合で異なりますが(詳しくはこちらをご覧ください)、基本的には参照設定を使うことをお勧めします。
参照設定は以下のように、VBAのコードエディタから「ツール > 参照設定」と進み、「Microsoft Word XX.X Object Library」にチェックを入れることで設定できます(XX.X部分の数字はバージョンによって変わります)。
パスワード付ファイルを開く方法などWordファイルを開く方法についてはこちらでも記載していますので詳しく知りたい場合はご参照ください。
貼付場所を選択する
貼付場所を選択する方法もいくつか考えられますが、VBAを利用して表を貼り付ける場合は大抵貼付場所が決まっていると思います。なので、貼付場所に特別な文字列をあらかじめ入れておくなどしてその文字列を検索して、貼付場所を指定するのが便利だと思います。
文字列を検索して該当箇所を選択するには、Word.Applicatoinオブジェクト下にあるSlectionオブジェクト下のFindオブジェクトを利用します。詳細について知りたい方はこちらをご覧ください。
ちなみに、表の貼付場所があるページの冒頭や末尾である場合はこちらのような選択方法もあります。
サンプルコード
下記のサンプルコードでは、ワードファイルを開き、指定した文字列の箇所にエクセルワークシートの表を貼り付けています。ちなみに表を貼り付けた後でその体裁を調整したい場合はこちらを参考にしてコードを追加してみてください。
なお、コードを使用する際はカッコに囲まれた部分([***])を自分のプログラムに合わせて変更してください。
Public Sub PasteTableToWord()
'--- Wordのアプリケーションオブジェクト ---'
Dim objWord As Word.Application
Set objWord = New Word.Application
objWord.Visible = True
'--- 開くワードファイルのパス ---'
Dim docPath As String
docPath = "[ワードファイルのパス]"
'--- ワードドキュメントを開く ---'
Dim objDoc As Word.Document
Set objDoc = objWord.Documents.Open(docPath)
'--- カーソルを冒頭に移動 ---'
objWord.Selection.Start = 0
objWord.Selection.End = 0
'--- 文字列を検索し選択 ---'
objWord.Selection.Find.Text = "[検索文字列]"
objWord.Selection.Find.Execute
'--- 選択箇所を取得 ---'
Dim startIndex As Long
Dim endIndex As Long
startIndex = objWord.Selection.Start
endIndex = objWord.Selection.End
'--- 貼付元のワークシート ---'
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("[ワークシート名]")
'--- 表をコピー ---'
Call ws.Range("[アドレス(A1:B10など)]").Copy
'--- 表を貼り付け ---'
Call objDoc.Range(startIndex, endIndex).Paste
End Sub