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関数の詳しい使い方については以下で解説しています。興味がある方は、以下を見てみてくださいね!

VBAでファイル名を取得するには?3+1のパターンで速攻理解!
更新日 : 2019年4月25日

方法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のFileSystemObjectを使いこなす!便利なメソッドを5種類紹介
更新日 : 2019年6月25日

まとめ

今回は、VBAでPDFファイルを印刷する方法を解説しました。

VBAでツールを作ると、印刷する量に左右されずに完全自動で印刷することができます。

Adobe Readerは無料で使えるので、ぜひインストールしてVBAを書いてみてくださいね!

プログラミングを効率良く学ぶなら

何から学び始めればいいの?
難しそうだし、挫折したらやだな…。
プログラミングに対して、このような悩みを持っている方も多いですよね。

そんな方には、弊社が運営するサブスク型のプログラミングスクール「SAMURAI ENGINEER Plus+がおすすめです。



月額2980円(税別)で、主に4つのサービスを提供させていただきます。

  • 現役エンジニアによる月1度の「マンツーマン指導」
  • 平均回答時間30分の「Q&Aサービス」
  • 作りながら学べる28種類の「教材」
  • 学習を記録&仲間と共有できる「学習ログ」

目的にあった教材を選べば、どなたでも効率よく学習できるほか、Q&Aサービスやマンツーマン指導を活用することで、挫折せずにプログラミングの習得が可能です。

プログラミングを効率的に学びたい人はもちろん、何から始めたらよいのかわからない方は、ぜひ「SAMURAI ENGINEER Plus+」をご利用ください。
まずは30日無料体験

書いた人

Sanshiro Wakizaka

北海道出身の30歳で、フリーランスエンジニア兼テックライターとして活動中。新卒入社したメーカー系のIT企業で、システムエンジニアとして約5年勤務。

Webアプリ、業務アプリ開発において、要件定義 ~ 運用保守まで様々な経験あり。また3歳の娘がいる1児のパパで、日々娘との時間を確保するために仕事を頑張っています!

侍エンジニアでは、【誰でもわかるレベルのわかりやすさ】を意識して、記事を執筆中。