Word VBAでドキュメントファイルを上書き保存する2つの方法


みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

Word VBAで複数のドキュメントを一括処理するマクロの作り方をお伝えしています。

前回の記事はこちら。

Word VBAでフォルダ内の全てのドキュメントのフォントの種類を変更する
Word VBAで複数のドキュメントに一括処理をする方法についてお伝えしています。今回は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プロパティはドキュメント全体の範囲を取得するプロパティです。

ただ、実行すると…

Word VBAでフォルダ内の全てのドキュメントについてフォント種類を変更

全部開きっ放しです…汗

だって、ドキュメントファイル、閉じてないですからね。そして、保存しないと閉じれないじゃないですか。

Saveメソッドで上書き保存をする

まず、シンプルにSaveメソッドを使って上書き保存をする方法です。

書き方はこちらです。

Documentオブジェクト.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

一瞬、指定のドキュメントが開きますが、すぐに閉じますね。再度開いて確認をしてみますと

Word VBAで文書のフォントを変更して上書き保存

うまくいっていますね。上書き保存、簡単です。

Closeメソッドの引数SaveChangesを設定して上書き保存をする

実は、Closeメソッドの引数SaveChangesの設定を加えると、上書き保存が可能になります。

Documentオブジェクト.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を設定すると、以下のようなダイアログが表示されるようになりますよ。

Word VBAのCloseメソッドで保存をユーザーに確認する

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を使う方法がありますが、私は後者のほうが好みです。行数減らせますしね。

今回のプロシージャは大量にドキュメントファイルを処理するときには、強力な武器になると思います。

さて、上書き保存についてお伝えしましたので、次回は名前をつけて保存についてお伝えしますね。

Word VBAで複数のドキュメントファイルを一括処理して名前を付けて保存する方法
Word VBAで複数ファイルを一括処理するマクロの作り方についてお伝えしています。今回はWord VBAで複数ファイルを処理してSaveAs2メソッドで名前を付けて保存する方法をお伝えします。

どうぞお楽しみに!

連載目次:Word VBAでフォルダ内のドキュメントを一括操作する

Wordで複数ドキュメントファイルに一括で同じ操作をしたいときがあります。そんな時は、VBAを使えば便利!マクロさえ仕込んでおけば、フォルダの中のドキュメントについてPCが自動で勝手に処理をしてくれます。そんなWord文書の一括操作のテクニックについてお伝えしていきます。
  1. Word VBAによるドキュメント一括処理の第一歩!文書ファイルを開く方法と閉じる方法
  2. Word VBAでFor Each~Next文を使ってフォルダ内のドキュメント全てを操作をする方法
  3. Word VBAでフォルダ内の全てのドキュメントのフォントの種類を変更する
  4. Word VBAでドキュメントファイルを上書き保存する2つの方法
  5. Word VBAで複数のドキュメントファイルを一括処理して名前を付けて保存する方法

  投稿者プロフィール

タカハシノリアキ株式会社プランノーツ 代表取締役
株式会社プランノーツ代表、コミュニティ「ノンプロ研」主宰。1976年こどもの日生まれ。東京板橋区在住。「ITで日本の『働く』の価値を上げる!」をテーマに、VBA&GASの開発、講師、執筆などをしております。→詳しいプロフィールはコチラ
★ご依頼・ご相談はお気軽にどうぞ!→お問い合わせはコチラ
★フォロー頂ければ嬉しいです。

タイトルとURLをコピーしました