みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
Word VBAで複数のドキュメントを一括処理するマクロの作り方をお伝えしています。
前回の記事はこちら。
フォルダ内の全てのドキュメントのフォントを変更する方法をお伝えしました。
ただ、全部のファイルのフォントが変更できたのはいいのですが、保存はできていないわ、全部開きっぱなしだわで中途半端でした。すみません。
ということで、今回はその点を解決すべく、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)
.Content.Font.Name = "Meiryo UI"
End With
Next obj
Set objFso = Nothing
End Sub
フォルダの操作が必要となりますので、3,4行目でFileSystemオブジェクトの変数宣言と生成をしています。
10~16行目が指定したフォルダ内の全てのファイルについて繰り返しを回す部分になっていて、それぞれのファイルについて12行目のOpenメソッドで開き、13行目のFont.Nameプロパティでフォントを変更しています。
Contentプロパティはドキュメント全体の範囲を取得するプロパティです。
ただ、実行すると…
全部開きっ放しです…汗
だって、ドキュメントファイル、閉じてないですからね。そして、保存しないと閉じれないじゃないですか。
Saveメソッドで上書き保存をする
まず、シンプルにSaveメソッドを使って上書き保存をする方法です。
書き方はこちらです。
試しに、以下プロシージャを実行してみましょう。
Sub openDoc()
Dim doc As Document
With Documents.Open("C:\Users\ntaka\Dropbox\desktop\word-document\原稿(1章).docx")
.Content.Font.Name = "Meiryo UI"
.Save
.Close
End With
End Sub
一瞬、指定のドキュメントが開きますが、すぐに閉じますね。再度開いて確認をしてみますと
うまくいっていますね。上書き保存、簡単です。
Closeメソッドの引数SaveChangesを設定して上書き保存をする
実は、Closeメソッドの引数SaveChangesの設定を加えると、上書き保存が可能になります。
SaveChangesには、以下WdSaveOptions列挙の定数を指定します。
定数 | 説明 |
---|---|
wdDoNotSaveChanges | 変更を保存しない |
wdPromptToSaveChanges | 変更を保存するかをユーザーに確認する |
wdSaveChanges | 変更を保存する |
デフォルトでは、wdDoNotSaveChangesつまり変更を保存しない設定になっています。
上書き保存をするのであれば、wdSaveChangesを設定すればよいということですね。
Sub openDoc()
Dim doc As Document
With Documents.Open("C:\Users\ntaka\Dropbox\desktop\word-document\原稿(1章).docx")
.Content.Font.Name = "Meiryo UI"
.Close wdSaveChanges
End With
End Sub
これで、変更が保存された上で閉じる、つまり先ほどと同様の結果が得られます。
一方で、引数にwdPromptToSaveChangesを設定すると、以下のようなダイアログが表示されるようになりますよ。
SaveメソッドよりもCloseメソッドのほうが細かい動作の設定ができますね。
フォルダ内の全てのドキュメントのフォントを変更して保存する
以上を踏まえて、フォルダ内の全てのドキュメントについてフォント種類を変更するプロシージャは以下になります。
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"
.Close wdSaveChanges
End With
Next obj
Set objFso = Nothing
End Sub
全部で11ファイルありましたが、ものの10秒程度で完了しました。大量に文書があるときはてきめんですね。
まとめ
Word VBAでドキュメントファイルを上書き保存する方法をお伝えしました。
Saveメソッドを使う方法と、Closeメソッドの引数wdSaveChangesを使う方法がありますが、私は後者のほうが好みです。行数減らせますしね。
今回のプロシージャは大量にドキュメントファイルを処理するときには、強力な武器になると思います。
さて、上書き保存についてお伝えしましたので、次回は名前をつけて保存についてお伝えしますね。
どうぞお楽しみに!