こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルVBAでPDFを大量に印刷したい

PDFファイルが6000件くらいあって Aというホルダーに1.pdf,2.pdf といった形で保存しております
エクセルのA列に必要な番号を入力し50~60件印刷します
A列には必要なファイル番号のみ入れていきます
2,3,6,100,210といった形でA列に必要なデータを入れて
VBAで起動させるとA1から順番にアクティブプリンターで印刷したいと
おもっています。
どのようなVBAにすればいいのかわかりません。
ループで繰り返しになる感じになると思います
N=N+1といった感じでA1セル.PDF
印刷
A2セル.PDF
          印刷
A3セル.PDF
          印刷
といった形でAに入る数字は毎回違ってきます
番号はあるけどファイルがない場合はその番号を
B1列から順番に摘出するようなものを考えてます
どなたかお忙しいとは思いますがご教示いただけませんか
よろしくお願いいたします

投稿日時 - 2016-10-09 09:41:43

QNo.9240258

すぐに回答ほしいです

質問者が選んだベストアンサー

これで、試してみてください。

Option Explicit
Sub Test()
Dim z As Object
Dim i As Long
Dim f, p As String
Set z = CreateObject("WScript.Shell")
p = Application.ActivePrinter
For i = 1 To Range("A1").End(xlDown).Row
f = "D:\Programming\" & Cells(i, 1).Value & ".pdf"
If Dir(f) <> "" Then
z.Run ("AcroRd32.exe /t " & f)
Else
Cells(i, 2).Value = Cells(i, 1).Value
Cells(i, 1).Value = ""
End If
Next i
Set z = Nothing
End Sub

簡単な説明です。

Set z = CreateObject("WScript.Shell")

このマクロの場合は、プログラム(Acrobat Readerでも、Acrobatでも可)をVBA上で動かすための機能を読み込んでいます。

p = Application.ActivePrinter

「通常使うプリンタ」の名前を読み込んでいます。

For i = 1 To Range("A1").End(xlDown).Row

1行目から、「A」列に何か記入されている最後の行まで繰り返し。

f = "D:\Programming\" & Cells(i, 1).Value & ".pdf"

例えば、「A1」に「1」とあれば、「D:Programming\"」フォルダ内の「1.pdf」という文字を文字列変数「f」に代入。

If Dir(f) <> "" Then

そのファイルが存在した場合、

z.Run ("AcroRd32.exe /t " & f)

そのファイルをプリント

Else

存在しなかった場合は、

Cells(i, 2).Value = Cells(i, 1).Value
Cells(i, 1).Value = ""

「A」列のその値を、「B」列にコピーし、「A」列の値を消しています。

例えば、「3.pdf」は存在しなければ、「A」列の「3」を「B」列の同じ行にコピーして、「A」列の「3」を削除しています。

以上ですが、私もサイトで調べて、書いたので、よく分からないのは、「p = 」の部分です。

結局、いらない?

とにかく、私の方で実験して、「Acrobat Reader」でも「Acrobat」でも、どちらでも動きましたので、試してみてください。

投稿日時 - 2016-10-09 10:46:28

補足

すみません ここにPDFファイルを1枚目のみ印刷
した場合はどのようにすればよろしいですか・・・

投稿日時 - 2016-10-09 11:06:01

お礼

本当にありがとうございました
印刷できましたしファイルのないものはB列に移動しています
とても感謝しております
お忙しい中ありがとうございます

投稿日時 - 2016-10-09 12:30:15

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問