タイトルのテキスト
タイトルのテキスト
タイトルのテキスト
タイトルのテキスト

ExcelVBAでワードのヘッダーを変更してPDFで出力するプログラム

VBA

t f B! P L

 ExcelVBAでワードのヘッダーを変更してPDFで出力するプログラム

 会社で使用する帳票類っていろいろな形式があります。

社内で統一されている場合はいいですが、

エクセルを開いたり、ワードを開いたり、パワーポイントを開いたり、

あっちに行き、こっちに行きとなっているとめんどうです。

そんな時は、エクセルでワードやほかのアプリケーションの操作もできればめんどうくさい作業を減らすことができます。

今回は、ExcelVBAWordをいじっていきます。

〇やりたいこと

エクセルで管理台帳を作っていて、文書はワード。

エクセルには提出した順に番号をつけてあり、ワードのヘッダーにある提出ナンバーをつどつど変更しながら発行している。

といった作業がうちにはあります。

エクセルで管理台帳をつくっているのなら、文書もエクセルにすれば簡単なのに、なぜか文書はワード??

こういうアプリケーションのちぐはぐははどこの会社でもあるものだと信じたい。

うちだけではないはず。

自分に権限があるのであれば、統一するのですが、そんな権限などないし、ワードを開いて、ヘッダーを編集して、PDF形式で出力する。

この作業がたくさんあると意外とめんどくさいです。

なので、それを自動化するVBAのコードを作ります。

〇作ったVBAのコード

VBAのコード

Dim wd As Word.Application

Dim wdDoc As Word.Document

n2 = Range("a1").Value

Set wd = CreateObject("Word.Application")

wd.Visible = True

Set wdDoc = wd.Documents.Open("C:\Users\〇〇〇〇\ワードの名前.docx")

wdDoc.Sections(1).Headers(1).Range.Delete

wdDoc.Sections(1).Headers(1).Range.Text = "ヘッダーの文" & n2

wdDoc.Sections(1).Headers(1).Range.Font.Size = 10

wdDoc.Sections(1).Headers(1).Range.Font.ColorIndex = wdGray50

fp = "C:\Users\〇〇〇〇\Desktop\ファイルの名前.pdf"

wdDoc.ExportAsFixedFormat fp, ExportFormat:=17

wdDoc.Save

wdDoc.Close

wd.Quit

VBAのコードの解説

・変数wdはワードアプリだよと宣言。

Dim wd As Word.Application

・変数wdDocはワードのドキュメントだよと宣言。

Dim wdDoc As Word.Document

・変数n2にセルA1の値が入るようにしています。

n2 = Range("a1").Value

・ワードアプリケーションを起動。

Set wd = CreateObject("Word.Application")

・ワードアプリケーションを可視化するのを明確にしています。

wd.Visible = True

・編集したいワードのドキュメントを開いて、変数に代入しています。

Set wdDoc = wd.Documents.Open("C:\Users\〇〇〇〇\ワードの名前.docx")

・ワードのヘッダーを一回削除しています。

wdDoc.Sections(1).Headers(1).Range.Delete

・新たに変更したワードのヘッダーを書き込みます。

wdDoc.Sections(1).Headers(1).Range.Text = "ヘッダーの文" & n2

・文字のサイズを指定しています。

wdDoc.Sections(1).Headers(1).Range.Font.Size = 8

・文字の色も指定してます。ちなみに薄いグレーです。

wdDoc.Sections(1).Headers(1).Range.Font.ColorIndex = wdGray50

PDFのファイルパスを変数に代入しています。

fp = "C:\Users\〇〇〇〇\Desktop\ファイルの名前.pdf"

PDF形式でエクスポート(出力)させています。

wdDoc.ExportAsFixedFormat fp, ExportFormat:=17

Wordを保存してます。

wdDoc.Save

・ドキュメントを閉じています。

wdDoc.Close

・ワードを閉じています。

wd.Quit

〇補足

今回は、変更したい番号をセルA1から読み込みました。

しかし、管理台帳のから、最新の番号を自動で読み取るようにすれば便利です。

以下のコードは、番号の表がセルA1から始まっていた場合、表の一番最後まで、セルを移動させるコードです。

Range("A1").Select

Do Until ActiveCell.Value = ""

ActiveCell.Offset(1, 0).Select

Loop

これで、最新のセルまで移動させて、ActiveCellの値を変数に代入すれば、表から自動で最新の番号を読み取って変更するプログラムに変えることができます。

他のアプリケーションを起動させたい場合は、CreateObject関数を使います。

CreateObject("Word.Application")でワードアプリケーションを起動させることができます。

しかし、これだけではアプリケーションを起動させただけなので、

Set wdDoc = wd.Documents.Open("C:\Users\〇〇〇〇\ワードの名前.docx")

でドキュメントを開いています。

 

wdDoc.ExportAsFixedFormat fp, ExportFormat:=17

wdDoc.ExportAsFixedFormat fp, wdExportFormatPDF

でもOKです。

〇まとめ

今回は、ExcelVBAでワードのヘッダーを編集して、PDFで出力するコードを作りました。

WordにはWordVBAがあります。WordVBAでワードの文章を変更する、初期化するといった作業を自動化させるのは簡単ですが、Excelからそれを行おうとすると少しコツが必要となってきます。

CreateObject("Word.Application")

でワードを起動させ、

wdDoc = wd.Documents.Open("C:\Users\〇〇〇〇\ワードの名前.docx")

でドキュメントを開く。

これは、Outlookや、PowerPointをエクセルから操作する時も同じです。

Excelから、WordPowerPointOutlookといった、オフィスソフトをいじることができるとあっちを開いたり、こっちを開いたりと、行ったり来たりのポチポチ作業を自動化させることができます。

koneka1208

koneka1208

自己紹介

自分の写真
エクセル好きの窓際会社員です。 エクセルの操作法や日々の会社で得た知見などを発信していきます。 よろしくお願いします。

ブログ アーカイブ

連絡フォーム

名前

メール *

メッセージ *

QooQ