こんにちは、Ryoです。
VBAでExcel以外のアプリケーションと連携して作業を行いたいケースが多々あります。その中でもWordは頻度が高いものと思いますので、今回はWord文書を開き、その文書末尾にExcelの表やグラフを貼り付ける方法について書いていきます。
1.サンプル概要
Excelのシートに以下画像に示す表があります。
この表をコピーし、VBA実行ファイルと同一保存先にあるWord文書(文書名:Sample1.docx)を開いて、末尾に貼り付けます。
≪貼付け前≫
≪貼付け実行後≫
2.サンプルコード
Sub Sample1() Dim WordApp As Object Dim WordDoc As Object 'セルA1を含む範囲コピーを実行 Cells(1, 1).CurrentRegion.Copy 'Wordを起動 Set WordApp = CreateObject("Word.Application") With WordApp 'Wordを表示 .Visible = True 'Wordの画面をアクティブ(最前面) .Activate End With '実行ファイルと同一フォルダ内のWord文書 '「Sample1.docx」を開く Set WordDoc = WordApp.Documents.Open _ (ThisWorkbook.Path & "\Sample1.docx") With WordDoc '開いたWord文書の末尾に表を貼付け .Range(.Range.End - 1).Paste End With 'カットコピーモード(破線点滅)終了処理 Application.CutCopyMode = False End Sub
このサンプルコードを実行すると指定したWord文書を開き、文書の末尾にExcelの表を貼り付けるものです。
先ずExcelのセルA1を含めて範囲コピーを実行し、その後Wordを起動していきます。この時にWord画面をPC上で表示させる場合にWordApp.Visible=Trueだけで良いかと思いましたが、私の環境ではWordApp.Activateも実行することで成立するようです。
With WordApp
.Visible = True
.Activate
End With
サンプルコードでは対象のWordファイルはVBA実行ファイルと同一の保存先に格納してありますので、そこを指定して開いています。
Set WordDoc = WordApp.Documents.Open _
(ThisWorkbook.Path & “\Sample1.docx”)
後は開いたWord文書に対してRangeオブジェクト/Endプロパティを利用して末尾を取得し、先程コピーした表をPasteメソッドを利用して貼り付けます。
With WordDoc
.Range(.Range.End – 1).Paste
End With
このように貼付けを行う場合はPasteメソッドを利用すれば実行できます。
構文:オブジェクト.Paste
実行後、対象Word文書には表が貼付けられますが、元のExcelファイルのカットコピーモードは解除されておらず以下画像のようになっていますから、Application.CutCopyMode = Falseで解除処理を行います。
◆参考:ExcelのグラフをWordに貼り付ける
このサンプルでは表を対象に処理していますが、CopyPictureメソッドを利ようすればExcelのグラフを同じようにWordに貼り付けることも可能です。
その場合、例えばSheet1にグラフがあればサンプルコードのCells(1, 1).CurrentRegion.Copyの部分をWorksheets(1).ChartObjects(1).CopyPictureとして実行すればOKです。
試しにサンプルで使用した表をグラフ化して実行した結果が以下ですので、ご参考までに。
3.まとめ
他アプリケーションと連携して処理を実行したいケースは間接業務を効率化する上で必要になることもあるかと思います。
今回のコピー&ペーストのような単純作業は人手の作業から解放し自動化するには好都合なので、処理の実行方法を知っておくと何かと有用ですから機会があれば活用などをご検討くださいませ。
以上、Word文書にExcelの表やグラフを貼り付ける方法についてでした!今回の記事が何かの参考になれば幸いです。
Ryo