【本日のミッション】
Excel VBAでワードを起動して、エクセルの表を図としてワードに貼付けよ。
Excel VBAでワードを起動して、エクセルの表を図としてワードに貼付けよ、というのが今回のミッションです。
Wordアプリケーションは、セルやシートと違って、Excel上には存在しない外部オブジェクトです。
Excelでは、「Word.Application」というオブジェクトを使って、Wordを操作する(作成、削除、移動、入力、コピー等)ことができます。
「Word.Application」を使用するには、下記の何れかの方法で準備をする必要があります。
VBE画面の参照設定を利用する方法です。
【利用方法】
Sub ExcelからWord起動表を図で貼付_参照設定必要() '【変数】 Dim wdApp As Word.Application '■画面更新の停止 Application.ScreenUpdating = False '■Wordの準備 Set wdApp = New Word.Application '■Wordの可視化 wdApp.Visible = True '■新規文書の作成 wdApp.Documents.Add '■表のコピー Range("A1:D13").Copy '■Wordに貼付け(リンク貼付しない、行内に配置、拡張メタファイル) wdApp.Selection.PasteSpecial Link:=False, Placement:=wdInLine, DataType:=wdPasteEnhancedMetafile Application.CutCopyMode = False ’カットコピーモード解除 '■変数の解放 Set wdApp = Nothing '■画面更新の再開 Application.ScreenUpdating = True End Sub
Dim wdApp As Word.Application
変数の宣言で「Dim wdApp As Object」としてしまうとVBAのエラーはでませんが、インテリセンス機能(自動メンバー表示)が利用できませんのでご注意ください。
Set wdApp = New Word.Application
この記述をすることで、変数「wdApp」をWord.Applicationとして使うことができます。
wdApp.Visible = True
wdApp.Documents.Add
Range("A1:D13").Copy
wdApp.Selection.PasteSpecial Link:=False, Placement:= wdInLine, DataType:= wdPasteEnhancedMetafile Application.CutCopyMode = False
Set wdApp = Nothing
【メリット】
wdApp.Selection.PasteSpecial Link:=False, Placement:=wdInLine, DataType:=wdPasteEnhancedMetafile
【デメリット】
関数を利用して、Word.Applicationを使えるようにする方法です。参照設定をしていなくても利用できます。
【利用方法】
Sub ExcelからWord起動表を図で貼付_参照設定不要() '【変数】 Dim wdApp As Object '■画面更新の停止 Application.ScreenUpdating = False '■Wordの準備 Set wdApp = CreateObject("Word.Application") '■Wordの可視化 wdApp.Visible = True '■新規文書の作成 wdApp.Documents.Add '■表のコピー Range("A1:D13").Copy '■Wordに貼付け(リンク貼付しない、行内に配置、拡張メタファイル) wdApp.Selection.PasteSpecial Link:=False, Placement:=0, DataType:=9 Application.CutCopyMode = False ’カットコピーモード解除 '■変数の解放 Set wdApp = Nothing '■画面更新の再開 Application.ScreenUpdating = True End Sub
Dim wdApp As Object
Set wdApp = CreateObject("Word.Application")
この記述をすることで、変数「wdApp」をWord.Applicationとして使うことができます。
wdApp.Visible = True
wdApp.Documents.Add
Range("A1:D13").Copy
wdApp.Selection.PasteSpecial Link:=False, Placement:=0, DataType:=9 Application.CutCopyMode = False
Set wdApp = Nothing
【メリット】
【デメリット】
wdApp.Selection.PasteSpecial Link:= False, Placement:= 0, DataType:= 9
コンパイルエラー:変数が定義されていません。
どちらのコードも処理の最後に
Set wdApp = Nothing
と、変数「wdApp」を解放するコードが必要です。
Word.Applicationのインスタンスが、メモリ上にずっと残ってしまうことがあるからです。
それがどういう状況なのかはわからないのですが、私も長時間マクロ処理をしていると処理が遅くなっていく現象に見舞われることがあります。
そんな時は、Excelと一旦閉じて再度立ち上げると、その現象は解消されます。
そんなこともあり、オブジェクト変数は最後に「Nothing」として、メモリ上から消すように心がけています。
コピーした内容を、Wordのカーソル位置に挿入します。
【参照設定をしている場合】
wdApp.Selection.PasteSpecial Link:=False, Placement:=wdInLine, DataType:=wdPasteEnhancedMetafile
【参照設定をしていない場合】
参照設定をしていない場合、上記のコードにするとエラーが出てしまうので、定数の指定を値にします。
コンパイルエラー:変数が定義されていません。
wdApp.Selection.PasteSpecial Link:=False, Placement:=0, DataType:=9
今回の貼付け処理は↓このイメージです。
引数 | 説明 | 省略 | |||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Link | True:リンク貼り付けをする。 false:リンク貼り付けをしない。(規定値) | 〇 | |||||||||||||||||||||||||||||||||
Placement | WdOLEPlacement 定数のいずれかを指定できます。
| 〇 | |||||||||||||||||||||||||||||||||
DataType | クリップボードの内容を文書に挿入するときの書式を指定します。 WdPasteDataType クラスの定数を使用します。
| 〇 |
※他にも引数は存在しますが、今回使用している引数のみご紹介しています。
系列が1つのグラフを自動大量連続作成(Excel VBA)
「実行時エラー 1004」を出さずに、ワークシート内のグラフを「グラフ 元」以外全て削除(Excel VBA)
グラフの参照先を変えると勝手にグラフの色が変わる現象を解決せよ
系列が複数あるグラフを自動大量連続作成(Excel VBA)
n行毎の改ページ設定 「実行時エラー1004 RangeクラスのPageBreakプロパティを設定できません」の原因(Excel VBA)
参照データ数が異なる・参照先が変動する月別グラフを自動大量連続作成(Excel VBA)
複数系列・参照データ数が異なる・参照先が変動する月別グラフを自動大量連続作成(Excel VBA)
大量の画像やグラフ等のオブジェクトで画面表示が遅いのを解決(Excel)
エクセル シートに画像が存在するかどうか(有無)を調べる方法(Excel VBA)
エクセルシート上 全てのオブジェクト(画像・図形・グラフ等)を選択し、削除する(Excel VBA)
エクセルシート上のオブジェクト(図形・画像・グラフ等)の件数を数える方法(Excel VBA)
エクセル シートにグラフが存在するかどうか(有無)を調べる方法(Excel VBA)
エクセル シートに図形が存在するかどうか(有無)を調べる方法(Excel VBA)
エクセル 選択しているセル範囲に写真が存在しているか(有無)を確認(Excel VBA)
エクセル 選択しているセル範囲にグラフが存在しているか(有無)を確認(Excel VBA)
エクセル 選択しているセル範囲に図形が存在しているか(有無)を確認(Excel VBA)
エクセル 選択セル範囲の写真を削除する(Excel VBA)
エクセル 選択セル範囲のグラフを削除する(Excel VBA)
エクセル 選択セル範囲の図形を削除する(Excel VBA)
Excel VBAでワードを起動して文字を入力操作(Excel VBA)
Excel VBAでワードを起動してエクセルの表をワードに貼付け(Excel VBA)
Excel VBAでワードを起動して エクセルのエクセルの表を図としてワードに貼付け(Excel VBA)
Word コピー貼付けした図が白い枠だけ?図が表示されない現象を解決
Excel VBAでワードを起動して グラフをワードに図として貼付け(Excel VBA)