社内で統一されている場合はいいですが、
エクセルを開いたり、ワードを開いたり、パワーポイントを開いたり、
あっちに行き、こっちに行きとなっているとめんどうです。
そんな時は、エクセルでワードやほかのアプリケーションの操作もできればめんどうくさい作業を減らすことができます。
今回は、ExcelVBAでWordをいじっていきます。
〇やりたいこと
エクセルで管理台帳を作っていて、文書はワード。
エクセルには提出した順に番号をつけてあり、ワードのヘッダーにある提出ナンバーをつどつど変更しながら発行している。
といった作業がうちにはあります。
エクセルで管理台帳をつくっているのなら、文書もエクセルにすれば簡単なのに、なぜか文書はワード??
こういうアプリケーションのちぐはぐははどこの会社でもあるものだと信じたい。
うちだけではないはず。
自分に権限があるのであれば、統一するのですが、そんな権限などないし、ワードを開いて、ヘッダーを編集して、PDF形式で出力する。
この作業がたくさんあると意外とめんどくさいです。
なので、それを自動化するVBAのコードを作ります。
〇作ったVBAのコード
〇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にはWordのVBAがあります。WordVBAでワードの文章を変更する、初期化するといった作業を自動化させるのは簡単ですが、Excelからそれを行おうとすると少しコツが必要となってきます。
CreateObject("Word.Application")
でワードを起動させ、
wdDoc = wd.Documents.Open("C:\Users\〇〇〇〇\ワードの名前.docx")
でドキュメントを開く。
これは、Outlookや、PowerPointをエクセルから操作する時も同じです。
Excelから、Word、PowerPoint、Outlookといった、オフィスソフトをいじることができるとあっちを開いたり、こっちを開いたりと、行ったり来たりのポチポチ作業を自動化させることができます。
0 件のコメント:
コメントを投稿