以前の記事「【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
コメント
マクロを実行すると、同じフォルダーではなくDocumentsフォルダーに保存されるようなのですが、変更することは可能でしょうか?
恐らく7行目が関係していると思われるのですが、、
WinFU さん
おそらく、OneDrive上のフォルダ内を指定されていると思います。
このマクロではOneDriveのフォルダパスを正確に取得できないので、
PDFの保存時に保存先を自動的にDocumentsフォルダに
変えてしまっていると思います。
40行目のmyFolderPath にフォルダパスを記述すれば特定のフォルダを指定できます。
お試しください。
はじめまして。
このマクロを使わせていただていたのですが、
時々下記エラーが出現し使用できないフォルダがあります。
”VBA エラー 91 オブジェクト変数または With ブロック変数が設定されていません。”
デバックを押すと39~41行が該当しているようですが、原因がわからず。
解決策はありますでしょうか。
おいもさん
エラーが出るフォルダは、OneDriveなどにある自動で同期されるフォルダではないでしょうか。別のフォルダに移したら処理できると思います。
お試しください。
はじめまして。
このマクロのおかげで、仕事が軽減されて非常に助かっています。
この応用で、フォルダ内にあるmsg形式のファイルを、ファイル名はそのままで一括でPDF化することは可能でしょうか。ど素人ながら、このコードを基に色々と試してみましたが、上手くいかず。wordに関連していない質問で大変申し訳ございませんが、もし可能でしたらご教示頂けますと幸いです。
どんぐりの森さん
はじめまして。お役に立てて何よりです。
msg形式のファイルについては、調べないとよくわかりません。
OutlookのVBAに詳しい方に聞いたほうがよさそうですね。