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:\Users\Siro\Desktop\PDF印刷_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:\Users\Siro\Desktop\PDF印刷_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:\Users\Siro\Desktop\PDF印刷元データ\"  'フォルダパス
    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:\Users\Siro\Desktop\PDF印刷元データ\"  'フォルダパス
    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を書いてみてくださいね!

LINEで送る
Pocket

SEからWebエンジニアへ転職した理由

侍エンジニア塾卒業生の小池さんは、以前は社内SEとして約5年ほど勤務していました。しかし業務内容は社内のヘルプデスク対応など、プログラムを書く仕事は全くなかったそうです。

SEながらプログラムを書けない現状に「将来仕事がなくなるんじゃないか」と不安を感じ、プログラミング学習を決意。

弊社スクールで学習し、無事ベンチャー企業のプログラマーとして転職に成功しました。そんな小池さんの学習法や転職体験談を伺いましたので、是非ご覧ください。

「プログラミングができないSEは仕事がなくなる」不安を感じたSEが未経験から転職成功するまで
更新日 : 2019年10月7日

書いた人

Sanshiro Wakizaka

Sanshiro Wakizaka

フリーランスエンジニア兼ライターのワキザカ サンシロウです。
ExcelVBAの自動化ツール開発、WEB開発をメインにエンジニア業務をこなしつつ、サムライエンジニアにてライター業務をしております。

プログラミングをこれからやってみたい方に向けて、ためになる記事を全力で書いていきますので宜しくお願い致します!

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説