みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
Word VBAで複数のドキュメントに一括処理をする方法についてのシリーズです。
前回の記事はこちらでした。
For Each文とFileSystemオブジェクトを使って、フォルダ内のドキュメントを操作する方法でしたね。
さて、いよいよその応用として、実際にいろいろな一括処理をしていきたいと思います。
今回は手始めとして、Word VBAでフォルダ内の全てのドキュメントのフォントを変更する方法です。
では、行ってみましょう!
前回のおさらい
前回作成したプロシージャはこちらです。
Sub openDocs()
Dim objFso As Object
Set objFso = CreateObject("Scripting.FileSystemObject")
Dim strPath As String
strPath = ThisDocument.Path & "\原稿\"
Dim obj As Object
For Each obj In objFso.getfolder(strPath).Files
With Documents.Open(strPath & "\" & obj.Name)
Debug.Print .Name
.Close
End With
Next obj
Set objFso = Nothing
End Sub
FileSystemオブジェクトを使って、現在マクロを記述しているドキュメントファイルと同階層にある「原稿」というフォルダ内にアクセスしています。
10~17行目のFor Each文で、そのフォルダ内のドキュメントファイル一つ一つについて繰り返しを行っています。
For Each文内の13行目の「Debug.Print」の位置の処理を変更することで、様々な一括操作ができるようになるという寸法ですね。
文書全体のフォント種類を変更する方法
今回は、ドキュメント全体のフォントの種類を変更していきたいと思います。
まずは、ドキュメント単体についてやってみましょう。
オブジェクトブラウザーでFontプロパティを持つクラスを調べる
さて、フォントを変更するのであれば、Fontオブジェクトを使うよということをお伝えしていました。
ただ、こちらの記事ではSelectionオブジェクトつまり選択範囲についてのFontオブジェクトだったんですよね。今回は、ドキュメント全体を対象としたいので、どうすればよいと思いますか?
VBEで F2 キーを押してオブジェクトブラウザーを開きましょう。そこで「font」と入力して Enter すると、「Font」をメンバーに持つクラスがバババって出てきます。
いっぱいありますね~。
答えを言っちゃいますと、今回はRangeオブジェクトを使います!
Fontプロパティで…
とすることで、指定した範囲のFontオブジェクトを取得することができます。
Contentプロパティでドキュメント全体の範囲を取得
Documentオブジェクトに対するContentプロパティで、ドキュメント全体の範囲を取得することができるんです。
プロパティ名はContentなのですが、これで指定したDocumentオブジェクト全体の範囲をRangeオブジェクトとして取得することができます。
ドキュメント全体のフォント種類を変更する
例えば、以下のような文書があるとします。
VBEを開いて、イミディエイトウィンドウに以下入力して Enter してみてください。
ThisDocument.Content.Font.Name = "Meiryo UI"
Name・・・?と思うかもしれませんが、これは「フォント名」です。フォント種類を変更するには、FontオブジェクトのNameプロパティを変更すればよいのです。
ですから、上記の命令を実行すると以下のように文書全体が「Meiryo UI」に変更されるわけです。
フォルダ内のドキュメントすべてのフォント種類を変更する
以上を踏まえまして、フォルダ内の全てのドキュメントについてフォント種類を変更するプロシージャを作りました。
Sub openDocs()
Dim objFso As Object
Set objFso = CreateObject("Scripting.FileSystemObject")
Dim strPath As String
strPath = ThisDocument.Path & "\原稿\"
Dim obj As Object
For Each obj In objFso.getfolder(strPath).Files
With Documents.Open(strPath & "\" & obj.Name)
.Content.Font.Name = "Meiryo UI"
End With
Next obj
Set objFso = Nothing
End Sub
13行目に、今回登場したContentプロパティ、そしてそれに対するFontオブジェクトの操作を入れてみました。
実行してみると
はい、全部開いて、フォント種類も「Meiryo UI」に変更されましたね。
ただ、全部開きっぱなしではありますが…
まとめ
Word VBAでフォルダ内のドキュメントファイル全てについてフォントの種類を変更する方法についてお伝えしました。
- Contentプロパティでドキュメント全体の範囲を取得する
- 範囲つまりRangeオブジェクトに対してフォント設定を変更する
このあたりがポイントでした。
さて、全部のドキュメントが開きっぱなし…だって、変更を保存しないと閉じられないじゃないですか。
ということで、次回はWordドキュメントを保存する方法です。
お楽しみに!