VBAでWordを動かすときによく使うコードまとめ
※注意
自分用にまとめた記事なので、かなり省略しています。
- Wordと連携する前に理解しておかなければいけないオブジェクトの構造階層
- オブジェクトライブラリを参照設定に追加
- Wordを開いてドキュメントを操作できるように宣言
- Word文書を操作する主なメソッド
- よく使うコード
Wordと連携する前に理解しておかなければいけないオブジェクトの構造階層
Rangeオブジェクトは、Wordに入力された文字のことを指します。
WordのApplication内に、Documentオブジェクトの文書があり、さらに段落のParagraphs(読み:パラグラフ)オブジェクト、表のTablesオブジェクトがあり、それぞれにRangeオブジェクトが入っています。
Paragraphsオブジェクト、Tablesオブジェクトは複数形のSが付くので、コレクションになります。
オブジェクトライブラリを参照設定に追加
まず、Excelで参照設定を行う。
「Microsoft Word xx(バージョン番号) Object Libary」にチェックをする。
Wordを開いてドキュメントを操作できるように宣言
Wordアプリケーションを格納する変数を宣言して、さらにWordアプリケーションを格納した変数を使って、Word文書を宣言する感じです。
これで、変数「wdDoc」を使ってWordを操作することが可能になりました。
□Wordアプリを宣言
Dim wdApp As Word.Application
Set wdApp = New Word.Application
□Documentオブジェクトを宣言
Dim wdDoc As Word.Document
Set WdDoc = wdApp.Documents
Word文書を操作する主なメソッド
Documents.Add ・・・新規の文書を開く
Documents.Open ・・・既存の文書を開く
(例)wdDoc.Documents.Open(path & "¥sample.docx")
InsertBefore ・・・段落の先頭位置に文字列を記入
InsertAfter ・・・段落の終了位置に文字列を記入
Save ・・・上書き保存
Close ・・・ドキュメントを閉じる
(例)ドキュメントを保存する時、一緒に上書き保存をする
WdDoc.Close SaveChanges:= True
※引数 SaveChanges:= は、上書き保存をするかどうかを決めます。
「SavesChanges:= False」は保存しない。
Quit ・・・アプリケーションを終了する
よく使うコード
□文書の0~50文字目を取得
wdDoc.Range(Start:= 0, End:= 50).Text
□12段落のすべての文字列を取得
WdDoc.Paragraphs(12).Range.Text
※取得したい文字は段落(Paragraphs)の中の文字(Range)だから忘れずに、Range.Textをつける
□12段落の3~10文字目を取得する
wdDoc.Range(wdDoc.Paragraphs(12).Range.Start + 2, _
wdDoc.Paragraphs(12).Range.Start + 10).Text
※特定の段落のなかの文字を取り出したい場合は、ドキュメント全体から取り出す方法と書き方が異なるので注意する。
□1段落目の先頭に文字列を挿入する
wdDoc.Paragrahs(1).Range.InsertBefore "おはよう"
□表内のセルに文字列を挿入する
wdDoc.Tables(1).Cell(Row:=1,Colum:=1).Range.InsertBefore "メモメモ"
※ドキュメント内に表が2つあり、2つ目の表が対象の場合は、Tables(2)とする。
表は「Cells」ではなく、「Cell」であるという点に注意する。
引数のRowは行。Columは列。
例のように、文字を取得する場合は「.Text」が必要ですが、Wordドキュメントに文字を入力する場合は、「.Text」は要りません。
□印刷プレビュー
wdDoc.ActiveDocuments.PrintPreview
□ドキュメントを印刷する
wdDoc.PrintOut
□PDFで出力する
wdDoc.ExportAsFixedFormat OutputFileName:= path & "¥sample.pdf", _
ExportFormat:=wdExportFormatPDF