VBAでPDFを印刷する方法・管理しやすいツールにする方法を解説!


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」を追加

「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を書いてみてくださいね!

この記事を書いた人

【プロフィール】
DX認定取得事業者に選定されている株式会社SAMURAIのマーケティング・コミュニケーション部が運営。「質の高いIT教育を、すべての人に」をミッションに、IT・プログラミングを学び始めた初学者の方に向け記事を執筆。
累計指導者数4万5,000名以上のプログラミングスクール「侍エンジニア」、累計登録者数1万8,000人以上のオンライン学習サービス「侍テラコヤ」で扱う教材開発のノウハウ、2013年の創業から運営で得た知見に基づき、記事の執筆だけでなく編集・監修も担当しています。
【専門分野】
IT/Web開発/AI・ロボット開発/インフラ開発/ゲーム開発/AI/Webデザイン

目次