wordファイルのpdf書き出し自動化
管理者用
今日は、WordファイルをPDFファイルに書き出すスクリプトの紹介です。
年賀状の季節になりました。
弊社での年賀状の取り扱いも、少なくなっておりますが、長年お付き合いしているお客様の要望もあり続けております。
2021年度の年賀状イラスト集をまとめた際に、作成したWordファイルのPDF書き出しスクリプトを作りました。
これが、結構便利でした。
単純作業だが面倒
イラスト集は、年賀状の絵柄を単純に並べるだけのものですが、インデザインを使用して作成します。
今回使用した、絵柄にWordファイルが含まれております。
Wordをそのままインデザインにレイアウトできません。
従って、WoedファイルをPDFファイルに書き出して、インデザインで作成する事としました。
Wordファイルを1件づつ読んでは書き出す作業を開始しました。
作業は単純ですが、1件ずつ行うのは大変です。
と言う事で、自動化スクリプトを作りました。
Wordマクロでスクリプトを探る
pdfに書き出すスクリプトが判りませでした。
そこで、便利なのが、マクロ のトレース機能です。
開発 ⇒ マクロの記録 ⇒
マクロトレース開始します
実際に、 ファイル ⇒ Adobe PDFとして保存 ⇒
保存場所を指定して、保存する。
開発 ⇒ 記録終了
記録したマクロを選択して 編集 から見てください。
以上の、トレースされた、PDF書き出しスクリプトの記述を使用して、スクリプトを作成しました。
スクリプトは、vbsスクリプトで記述してます。
特定フォルダーを監視し、Wordファイルの存在を確認するとPDFファイルに書き出すスクリプトとなってます。
操作方法
ディスクトップ上に、スクリプトファイル ”Wprd_PDF.vbs” を配置する。
また、同じディスクトップ上にフォルダー ”WordPDFHotfolder” を作成
さらに、その中にフォルダー"pdf" を作成しておきます。
vbs起動
ディスクトップ上の ”Wprd_PDF.vbs” アイコンをダブルクリック
フォルダー ”WordPDFHotfolder” 内のファイルを監視ループに入ります。
これで、シャットダウンするまで、この状態は続きます。
フォルダー ”WordPDFHotfolder” に、Wordファイルをコピペすると、pdfファイル書き出しが実行に入ります。
pdfファイルは、 フォルダー”WordPDFHotfolder”内の フォルダー "pdf" 内に出来ていきます。
注)フォルダー”WordPDFHotfolder”に挿入したWordファイルは削除されます。
大事なWordの元ファイルを無くしたくない方は、必ずコピペで行ってください。
ドラックしても実行しますが、元ファイルは消えてしまいます。
ループについて
常にループするようにして、実行出来るように作ってますが、運用によっては、ループさせないで、都度実行する方が良い場合もあります。
この場合は、スクリプトをループしないように書き換えて使用してください。
ループを止めたい場合、.txt ファイルをドラックすると、止まるようにはしてます。
vbsスクリプト
スクリプトを記述してます。
興味のある方は、メモ帳 などでコピーして使用してください。
ファイル拡張子は、 .vbs です。
運用にあたっては、自己責任で行ってください。
特に、ドラック、または、コピペしたWordファイルは、PDFに書き出した後、削除するように作っております。
・・・・・ファイルを削除しちゃいます。
・・・・・消えてなくなっちゃいます。
Word_PDF.vbs
Option Explicit
Dim strTargetFolderPath
Dim objFiles
Dim objFolder
Dim objFile
Dim FileMei, FileDel
Dim FileCount
Dim F_End
Set objFiles = CreateObject("Scripting.FileSystemObject") 'ファイルシステムオブジェクトを作成
strTargetFolderPath = "C:\Users\saneiprint\Desktop\WordPDFHotfolder" 'このホットフォルダに
Set objFolder = objFiles.GetFolder(strTargetFolderPath) 'フォルダオブジェクト取得
F_End = 0
Do While F_End = 0 '永久ループ
F_End = 1 'デバック時に活かす 永久ループにする場合は、コメント行にする
FileCount = objFolder.Files.Count 'ファイルの数 フォルダの数は、 objFolder.SubFolders.Count
If FileCount >= 1 Then
For Each objFile In objFolder.Files
'取得したファイルのファイル名を表示
FileMei = objFile.Name
If right(FileMei,3) = "doc" or right(FileMei,4) = "docx"then
Rem ここに処理を記述===============
Call PDF_File_In(FileMei)
Rem ここ迄に処理を記述==============
FileDel = strTargetFolderPath & "\" & FileMei
objFiles.DeleteFile FileDel,True 'ファイルを削除
Else
If right(FileMei,3) = "txt" then
F_End = 1
Exit Do 'txtファイルで終了
else
Exit For 'docファイルでは無い場合終了
End if
End if
Next
Else
WScript.sleep(2000)
End if
Loop
Set objFolder = Nothing
Set objFiles = Nothing
'==================================
'==================================
Sub PDF_File_In(FileMei)
Dim myWord
Dim docWord
Dim Dat_namae
Dim TextFramCall
Dim WordFILMEI
Dim PdfFILMEI
Dim sp, nm1, nm2
Set myWord = CreateObject("Word.Application") ' Word 起動
myWord.Visible = True ' Word を表示する
WordFILMEI = strTargetFolderPath & "\" & FileMei
sp = InStr(1, FileMei, ".doc", 1)
If sp = 0 Then
nm1 = FileMei
nm2 = ""
Else
nm1 = Mid( FileMei, 1, sp - 1)
nm2 = Mid( FileMei, sp + 1)
End If
Set docWord = myWord.Documents.Open (WordFILMEI,False,True)
PdfFILMEI = strTargetFolderPath & "\pdf\" & nm1 & ".pdf"
Call docWord.ExportAsFixedFormat (PdfFILMEI, 17)
docWord.Close
myWord.Quit
End Sub
'==================================