【Word VBA】フォルダ内のWordファイルをPDF形式で一括保存するWordマクロ

以前の記事「【Word VBA】WordファイルをPDF形式で保存するWordマクロ」の応用版です。

今日の作業で大量のWordファイルをPDFにする必要がありまして作ってみました。

かつて作った上記のコードを利用しています。

このマクロでできること

マクロを実行するとフォルダを選択するダイアログが表示されます。フォルダを選択するとそのフォルダ内のWordファイルが自動的にPDFファイルに保存されます。

PDFファイルは選択したフォルダと同じフォルダに保存されます。ファイル名の頭に「PDF_」と挿入されます。

マクロ実行前

フォルダを選択します。

このフォルダには、以下のようにWordファイルが保存されています。

マクロ実行後

PDFファイルが同じフォルダ内に作成されました。

マクロの解説

フォルダ内のWordファイルを取得する方法については、以前の記事のコードを参考にしました。

(参考:【Word VBA】複数のWordファイルを一つにまとめるWordマクロ

31行目でWordファイルを開いています。このときに、Visible:=Falseとしているのでファイルを非表示のまま処理をしています。これをTrueにすれば、実際に開かれているファイルを表示できます。

40行目でPDFファイル名を決めています。このマクロでは、Wordファイル名の先頭に「PDF_」と入れていますが、これは削除してもかまいませんし別の文字列にしてもかまいません。

マクロ


Sub フォルダ内のWordファイルをPDFにする()
  
 Dim fld As FileDialog 'フォルダ選択のダイアログ表示用
 Dim myFileName As String 'Wordファイル名
 Dim myFolderPath As String 'Wordファイル保存先のフォルダパス
 Dim myFilePath As String 'Wordファイル/PFDファイルのパス
 Dim myDoc As Document 'Wordファイルのオブジェクト
 Dim intPos As Integer 'Wordファイル名取得用のピリオドの位置
 
 '-------------------------------------------
 'フォルダの選択
 '-------------------------------------------
 Set fld = Application.FileDialog(msoFileDialogFolderPicker)
 If fld.Show = 0 Then Exit Sub
 
 myFolderPath = fld.SelectedItems(1)
 myFileName = Dir(myFolderPath & "\*.doc*")
 
 If myFileName = "" Then
  MsgBox "選択したフォルダ内に、Wordファイルがありません。"
  Exit Sub
 End If
 
 '-------------------------------------------
 'WordファイルをPDFファイルに変換
 '-------------------------------------------
 Do While myFileName <> ""
 
  'Wordファイルを開く(非表示)
  myFilePath = myFolderPath & "\" & myFileName
  Set myDoc = Documents.Open(FileName:=myFilePath, Visible:=False)
  DoEvents
  
  '拡張子のない名称を取得
  intPos = InStrRev(myFileName, ".")
  myFileName = Left(myFileName, intPos - 1)
  
  'PDF形式で保存(ファイル名先頭に「PDF_」と挿入)
  myDoc.ExportAsFixedFormat _
   OutputFileName:=myFolderPath & "\PDF_" & myFileName & ".pdf", _
   ExportFormat:=wdExportFormatPDF
  DoEvents
  
  'Wordファイルを閉じる
  myDoc.Close wdDoNotSaveChanges
  DoEvents
  
  '次のWordファイルを検索
  myFileName = Dir()
  
 Loop
 
 Set myDoc = Nothing
 Set fld = Nothing
 
End Sub

関連記事

【Word VBA】WordファイルをPDF形式で保存するWordマクロ

【Word VBA】複数のWordファイルを一つにまとめるWordマクロ

コメント

  1. WinFU より:

    マクロを実行すると、同じフォルダーではなくDocumentsフォルダーに保存されるようなのですが、変更することは可能でしょうか?
    恐らく7行目が関係していると思われるのですが、、

  2. 新田順也 より:

    WinFU さん

    おそらく、OneDrive上のフォルダ内を指定されていると思います。

    このマクロではOneDriveのフォルダパスを正確に取得できないので、
    PDFの保存時に保存先を自動的にDocumentsフォルダに
    変えてしまっていると思います。

    40行目のmyFolderPath にフォルダパスを記述すれば特定のフォルダを指定できます。
    お試しください。

  3. おいも より:

    はじめまして。
    このマクロを使わせていただていたのですが、
    時々下記エラーが出現し使用できないフォルダがあります。
    ”VBA エラー 91 オブジェクト変数または With ブロック変数が設定されていません。”
    デバックを押すと39~41行が該当しているようですが、原因がわからず。
    解決策はありますでしょうか。

    • 新田順也 より:

      おいもさん
      エラーが出るフォルダは、OneDriveなどにある自動で同期されるフォルダではないでしょうか。別のフォルダに移したら処理できると思います。
      お試しください。

  4. どんぐりの森 より:

    はじめまして。
    このマクロのおかげで、仕事が軽減されて非常に助かっています。
    この応用で、フォルダ内にあるmsg形式のファイルを、ファイル名はそのままで一括でPDF化することは可能でしょうか。ど素人ながら、このコードを基に色々と試してみましたが、上手くいかず。wordに関連していない質問で大変申し訳ございませんが、もし可能でしたらご教示頂けますと幸いです。

    • 新田順也 より:

      どんぐりの森さん
      はじめまして。お役に立てて何よりです。
      msg形式のファイルについては、調べないとよくわかりません。
      OutlookのVBAに詳しい方に聞いたほうがよさそうですね。

トップへ戻る