[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBA リストの順番通りにPDFを印刷する』(ひでと)
印刷リストがあります。
D2にパス名
C3〜C43までに印刷枚数
D3〜D43までに印刷するPDFの名前
を入れています。
A B C D E
1
2 枚数 C:\Users\あああ
3 9 AAA.PDF
4 2 BBB.PDF
5 5 CCC.PDF
6 7 DDD.PDF
リストの順番通りに印刷していってほしいのに、ぐちゃぐちゃに
印刷されてしまいます。
先日アドバイスを頂いたものに、色々見て自分で付け足しのですが、
これだと一回一回Acrobatreaderを 手動で閉じないと、
次に進まないのです。
どうしたものでしょう…見て頂けないでしょうか。
宜しくお願いいたします。
Sub 印刷2()
Dim i As Integer
Dim j As Integer
Dim strshellcommand As String
Dim obJWSH As Object
PrinterName = Application.ActivePrinter
For j = 3 To 43
Filename = Range("D2") & "\" & Range("D" & j) If Range("C" & j).Value >= 0 Then For i = 1 To Range("C" & j) strshellcommand = "AcroRd32.exe /t " & Filename Set obJWSH = CreateObject("WScript.Shell") obJWSH.Run strshellcommand, vbNormalFocus, True Set obJWSH = Nothing Next i End If Next End Sub
< 使用 Excel:Excel2010、使用 OS:Windows7 >
AcroRd32.exe /t path printername drivername portname
path : ファイルパス
printername : プリンタ名
drivername : プリンタドライバ名
portname : プリンタポート名
順番に関しても一応調べてみます。
私が調べている間に誰か優秀な方が回答してくれることを祈ります。
(チック) 2017/07/24(月) 10:23
横から失礼します。
根本的な解決方法ではないですが、コマンドラインから操作できる「pdftk」というツールがあります。
PDFの結合が出来ますので、エクセルvbaからコマンドラインを使用し、pdfファイルを指定の順番で 結合、そのあと、出来たpdfを印刷、とします。
他に方法がなかった場合の最後の手段として検討してみてください。 (カリーニン) 2017/07/24(月) 10:32
順番はよくわかりませんねぇ。バッチファイルとかでやってるの見る限りこの方法なら順次印刷されそうですけど・・・サイズとかで勝手に順番変えちゃうのかな。もう少し調べてみます。
(チック) 2017/07/24(月) 10:46
カリーニン様、mm様もありがとうございます。
うまくできなかったら、参考にさせていただきます。
(ひでと) 2017/07/24(月) 15:58
先にACROBATを起動して印刷したら、一回一回手動で閉じなくて
よくなりましたが、順番はばらばらです…
AAAが1枚印刷され、BBBが1枚印刷され、またAAAが1枚印刷され
といった感じです。
どうすればいいでしょうか<m(__)m>
(ひでと) 2017/07/24(月) 18:15
(mm)さん 2017/07/24(月) 11:10がよいアドバイスされてるのに、なぜ試さないのですか? Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)'←プロシージャの外
Sub test() Dim i As Long For i = 1 To 10 '印刷命令 Sleep 3000 '←これを入れるだけ Next i End Sub
(稲葉) 2017/07/24(月) 18:45
気になったので調べてみましたが、同じ現象で悩んでいる人いるみたいですね。
https://forums.adobe.com/thread/406574
その中で試して効果がありそうなのが https://support.microsoft.com/ja-jp/help/891594
「スプールされたドキュメントを最初に印刷する」のチェックをはずしたり
「プリンタへ直接印刷データを送信する」 を試してみてはどうでしょうか? (稲葉) 2017/07/24(月) 19:21
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)'←プロシージャの外
を入れて、 Sleep 3000をいれましたが、コンパイルエラーがでました。
プリンタの諸々も試してみましたが、やっぱりダメでした…
そこで、SLEEPの代わりに
WaitSec = 3
Application.Wait (DateAdd("s", WaitSec, Now))
をNEXT iの前に入れて、とりあえず順番通りに印刷できるようになりました。
色々とアドバイス、ありがとうございました。
(ひでと) 2017/07/25(火) 12:32
>Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)'←プロシージャの外 >を入れて、 Sleep 3000をいれましたが、コンパイルエラーがでました。
標準モジュールに記述しましたか? ThisWorkbookモジュールやユーザーフォームに記述してませんか? (カリーニン) 2017/07/25(火) 21:37
参考HPです。
http://officetanaka.net/excel/vba/beginner/10.htm
(カリーニン) 2017/07/25(火) 21:40
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.