VBAでPDFファイルを印刷する方法が知りたい・・・
できれば、方法だけでなく具体的なサンプルコードも知りたいな・・・
PDFファイルの印刷作業が自動化できるといいな・・・
事務や経理作業をしていると、PDFファイル印刷するケースはよくありますよね。月末に請求書を大量に印刷するケースや、社員向けに大量に印刷するケースはよくあります。数が多いと、手作業ではとても時間がかかってしまいますよね。
こんにちは!フリーランスエンジニア兼テックライターのワキザカです。
この記事では、VBAでPDFファイルを印刷する方法について解説します!
ただ印刷する方法だけでなく、部分一致でファイルを一括印刷する方法、フォルダ内のファイルを一括する方法など実務で使えるサンプルも用意しているので、ぜひ最後まで見てみてくださいね!
この記事はこんな人のために書きました。
- VBAでPDFファイルを印刷する方法を知りたい人
- PDFファイルの印刷作業を効率化したい人
VBAでPDFを印刷する方法とは?
はじめに、VBAでPDFを印刷する方法について解説します。
VBAでPDFファイルを印刷するときは、Shellを使えばOKです。具体的には、次のようなShellコマンドを実行すると、PDFファイルを印刷することができます。
AcroRd32.exe /t ファイルパス プリント名
このコマンドを、VBAで実行する処理を作ることで、PDFファイル自動印刷できます。実行には参照設定の追加が必要なので、それぞれ詳しく解説しますね。
※無料で使えるAdobe Readerを使うので、インストールがまだの方は先にインストールをしてから進めてください。
Adobe Readerのインストール場所 → https://get.adobe.com/jp/reader/otherversions/
手順1:事前準備
まず、参照設定の追加方法について解説します。
手順は、次のとおりです。
1. VBEのツールタブから参照設定を開く
2. 「Windows Script Host Object Model」を追加
これで準備完了です。次に、具体的なVBAの書き方を解説しますね。
手順2:Shellコマンドを使ってPDF印刷処理を作る
次に、Shellコマンドを使ってPDF印刷処理を作る方法について解説します。
次のようにShellオブジェクトを作成し、Runメソッドを使うだけで簡単に実行することができます。ちなみに以下は、C:UsersSiroDesktopPDF印刷_Shellにある請求書PDF.pdfのファイルを印刷するサンプルです。
サンプルコード:
Sub PDF印刷_Shell() Dim wshShellObj As IWshRuntimeLibrary.WshShell 'Shellオブジェクト Set wshShellObj = New IWshRuntimeLibrary.WshShell Dim strShellCommand As String 'Shellコマンド Const folderPath = "C:UsersSiroDesktopPDF印刷_Shell" 'フォルダパス Const printFileName = "請求書PDF.pdf" '分割元のPDFファイル名 Const printFilePath = folderPath & printFileName '分割元のファイルパス Dim printerName As String 'プリンタ名 printerName = "LX-10000F" 'Shellコマンドを設定 strShellCommand = "AcroRd32.exe /t " & printFilePath & " " & printerName 'Shellコマンドを実行 wshShellObj.Run (strShellCommand) 'オブジェクトを強制開放 Set wshShellObj = Nothing End Sub
wshShellObj.Runの引数にAdobe Readerを使って印刷するコマンドを入れることで、印刷することができます。
ちなみに、printerNameにプリンター名を入れますが、プリンタ名は「Application.activePrinter」で調べることができます。イミディエイトウィンドウに「?Application.activePrinter」を入力してエンターキーを押すと、通常使っているプリンター名が確認できます。
「on 〇〇」になっているところはプリンタのポートなので、今回は無視してOKです。Shellコマンドに慣れていない場合は少し苦戦するかもしれませんが、サンプルコードを動かしながら学んでいけばOKです!
VBAでPDFを印刷するファイルの指定方法とは?
ここまで、PDFファイルを印刷する処理の作り方を解説してきました。
ただ、1つのファイルだけ印刷できても、手作業で印刷するのと変わらないですよね。そのため、複数ファイルを一括で印刷する処理を作る方法を解説します。
方法1:ファイル内一括指定
1つ目は、特定フォルダを指定して一括で印刷する方法です。
具体的なサンプルコードを使って解説しますね。
指定フォルダにあるファイル一覧:
サンプルコード:
Sub フォルダ内一括印刷() 'Shell実行用の変数設定 Dim wshShellObj As IWshRuntimeLibrary.WshShell 'Shellオブジェクト Set wshShellObj = New IWshRuntimeLibrary.WshShell Dim strShellCommand As String 'Shellコマンド Const folderPath = "C:UsersSiroDesktopPDF印刷元データ" 'フォルダパス Dim printFileName As String 'ファイル名 Dim printFilePath As String 'ファイルパス Dim printerName As String 'プリンタ名 printerName = "LX-10000F" '対象フォルダのPDFファイルをDir関数で取得 printFileName = Dir(folderPath & "*.pdf") '拡張子が「.pdf」のファイルがある限り、処理をループ Do While printFileName <> "" 'PDFファイルパスを設定 printFilePath = folderPath & printFileName '印刷するPDFファイルパス 'Shellコマンドを設定 strShellCommand = "AcroRd32.exe /t " & printFilePath & " " & printerName 'Shellコマンドを実行 wshShellObj.Run (strShellCommand) '次のPDFファイル名を取得 printFileName = Dir() Loop 'オブジェクトを強制開放 Set wshShellObj = Nothing End Sub
Dir関数のワイルドカードの指定を「*.pdf」にすることで、指定したフォルダのPDFファイルを一括で印刷しています。Dir関数と組み合わせて覚えておくと、応用が効くのでおすすめです!
ちなみに、Dir関数の詳しい使い方については以下で解説しています。興味がある方は、以下を見てみてくださいね!
方法2:ファイル名部分一致
2つ目は、部分一致でファイルを複数選択して印刷する方法です。ファイル名に特定の文字があるPDFファイルを一括で印刷したいときにおすすめの方法ですね。
具体的なサンプルコードを使って解説します。
指定フォルダにあるファイル一覧:
サンプルコード:
Sub 部分一致で一括印刷() 'Shell実行用の変数設定 Dim wshShellObj As IWshRuntimeLibrary.WshShell 'Shellオブジェクト Set wshShellObj = New IWshRuntimeLibrary.WshShell Dim strShellCommand As String 'Shellコマンド Const folderPath = "C:UsersSiroDesktopPDF印刷元データ" 'フォルダパス Dim printFileName As String 'ファイル名 Dim printFilePath As String 'ファイルパス Dim printerName As String 'プリンタ名 printerName = "Adobe PDF" '対象フォルダのファイル名に「請求書」があるファイルをDir関数で取得 printFileName = Dir(folderPath & "*請求書*") '「請求書」がファイル名にあるファイルがある限り、処理をループ Do While printFileName <> "" 'PDFファイルパスを設定 printFilePath = folderPath & printFileName '印刷するPDFファイルパス 'Shellコマンドを設定 strShellCommand = "AcroRd32.exe /t " & printFilePath & " " & printerName 'Shellコマンドを実行 wshShellObj.Run (strShellCommand) '次のPDFファイル名を取得 printFileName = Dir() Loop 'オブジェクトを強制開放 Set wshShellObj = Nothing End Sub
Dir関数にワイルドカード(*)を指定し、「請求書」の文字列が含まれているファイル名を取得しています。取得したファイル名が空になるまでDo While文でPDFファイルを印刷する処理を実行することで、「請求書」が含まれたファイルを一括で印刷しています。
このように、Dir関数を使えば複数ファイルを一括で印刷することができます。
VBAでPDF印刷が終わった後の管理がしやすくする方法
VBAでPDF一括印刷処理を作るときは、どこまで印刷が終わっているか管理したい・・・と思う人が多いのではないでしょうか。
いくら自動で印刷できても、印刷された紙を確認してどこまで終わったか確認するのでは非効率ですよね。一覧シートを作り手作業で印刷状態を管理することもできますが、終わったファイルはフォルダ移動するようにすれば完全に自動化することができます。
フォルダを移動する方法は以下で詳しく解説しているので、興味がある方は見てみてくださいね!
まとめ
今回は、VBAでPDFファイルを印刷する方法を解説しました。
VBAでツールを作ると、印刷する量に左右されずに完全自動で印刷することができます。
Adobe Readerは無料で使えるので、ぜひインストールしてVBAを書いてみてくださいね!