PDFを一括でプリントアウトしたい場合、CreateObject関数を用いてShellコマンドを使うと簡単にできます。
VBAでShellコマンドを使いたい場合、参照設定から「Windows Script Host Object Model」を追加する方法とCreateObject関数を使う方法の2パターンあります。
参照設定を行う方法の方がメジャーかもしれません。
しかし、参照設定を行う方法では、ファイルごとに設定を行わなければならないため、他のファイルにコードをコピーしただけではエラーになってしまいます。
今回は、この場合CreateObject関数を使う方法を紹介したいと思います。
〇やりたいこと
僕が今回やりたかったことは、ExcelファイルのシートにPDFのファイルパスの一覧があります。そのファイルパスから、まとめてPDFを一括で印刷したいです。
〇作ったコード
本来は、関連したキーワードをもとに、PDFのデータベースフォルダーから、Excel上に読み込んで使用しているのですが、ExcelにPDFを読み込むとどうしても画質が落ちてしまいます。Excelに読み込むので、自分で内容を確認するときにはこちらが便利なのですが、客先などに提出する場合には、そのまま印刷したいです。しかし、対象のPDFがたくさんある場合は、一つずつ印刷するのは非常にめんどくさいです。
なので、以下のコードをつくりました。
Range("A1").Select
Do Until ActiveCell.Value = ""
failpass = ActiveCell.Value
prn = "プリンター名"
pdf = "Acrobat.exe /t " &
failpass & " " & prn
CreateObject("Wscript.Shell").Run
(pdf)
Loop
これで、ファイルパスの一覧のPDFを一括で印刷することができます。
〇コードの解説
・表のファイルパスが格納されている表の先頭を選択。
Range("A1").Select
・表のが空になるまでループ処理を行います。
Do Until ActiveCell.Value = ""
・セルに格納されているファイルパスを変数に格納しています。
failpass = ActiveCell.Value
・プリンター名を変数に格納しています。
prn = "プリンター名"
・アクロバットリーダーのプログラムを変数に格納しています。
pdf = "Acrobat.exe /t " &
failpass & " " & prn
・CreateObject関数を使用してShellコマンドを生成して、Runで動かしています。
CreateObject("Wscript.Shell").Run
(pdf)
・ループ処理終わり
Loop
ちなみに・・・
現在のプリンター名は
Range("D4").Value = Application.ActivePrinter
でセルD4に現在の設定しているプリンター名を出力することができます。
セルD4は適当なので、任意のセルに出力させてください。
Acrobat.exe /tの部分は、
64ビット版のOSを使用している場合は
“Acrobat.exe /t ”
32ビット版の場合は、
“AcroRd32.exe /t ”
と使い分けて下さい。
途中の半角スペースに注意してください。
合体させると
Acrobat.exe /t failpass プリンター名
となります。
〇まとめ
今回は、VBAでPDFファイルを一括で印刷する方法を紹介しました。
参照設定を行うのが一般的かと思いますが、CreateObject関数でShellコマンドを使っても、まとめて印刷することができます。
PDFのファイルパスは一定のルールを作って名前を付けておくと簡単にデータベース化できるので便利です。
ファイルパスがあるかどうかはDir関数をつかうと調べることができます。
以下のようなコードでファイルネームの一覧を作ることができます。
F = Dir("フォルダーパス\" & "*")
Do While F <> ""
A = A + 1
Cells(A, 1).Value = “フォルダーパス\” & F
F = Dir()
Loop
0 件のコメント:
コメントを投稿