TOP > blog > wordファイルのpdf書き出し自動化
スクリプト
2020/10/23

wordファイルのpdf書き出し自動化

管理者用
blog

今日は、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

'==================================

関連記事