vbaでPDFファイルが印刷されない

このQ&Aのポイント
  • vbaでPDFファイルが印刷されない問題の解決方法を教えてください
  • エクセルのA列に「フォルダ場所+ファイル名.pdf」のリストを作成し、PDFファイルを開き、印刷し、閉じるマクロを作成しましたが、全く印刷されません。
  • ネット検索で見つけた方法が高度すぎて苦戦しています。エクセルシートの内容は、セルA2~にはフォルダ場所+ファイル名.pdf、C2には印刷実行数(ファイルの数)を置いています。
回答を見る
  • ベストアンサー

vbaでPDFファイルが印刷されない

エクセルのA列に「フォルダ場所+ファイル名.pdf」のリストを作成し、 PDFファイルを開き、印刷し、閉じるマクロを作成しましたが、全く印刷されません。 エラーが出て止まることなく、次々進んでいるのですが、肝心の印刷が実行されていません。 ネット検索で見つけたものをアレンジしたのですが、高度すぎて苦戦しています。 エクセルシートの内容は、 セルA2~には、フォルダ場所+ファイル名.pdf  例)C:\work\test1.pdf C2には印刷実行数(ファイルの数) を置いています。 どなたかご存知の方いらっしゃいましたら、どうか教えてください。 よろしくお願いいたします。 ---------------------------------------------------- Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub PDF() Dim AA, BB, CC, DD Dim AAA, BBB Dim i As Long For i = 1 To Range("C2").Value AA = "C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe /t " BB = Range("A" & i + 1).Value CC = Application.ActivePrinter DD = AA & """" & BB & """" & " " & """" & CC & """" Debug.Print DD Set AAA = CreateObject("WScript.Shell") Set BBB = AAA.exec(DD) Sleep 1000 On Error Resume Next BBB.Terminate Set BBB = Nothing Set AAA = Nothing Next i End Sub

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

  • ベストアンサー
回答No.2

yon56です。 私の参照設定と同じにしてみて下さい。 Visual Basic For Applications Microsoft Excel 11.0 Object Library OLE Automation Microsoft Office 11.0 Object Library Microsoft Forms 2.0 Object Library Windows Script Host Object Model 残りの点として、 マクロのプリンターの名称をApplication.ActivePrinterとしないで、 プリンタとFAXに表示されたプリンターの名前をコピー貼付してみて下さい。 Application.ActivePrinterが正しく機能していないこともあります。

yamayama456
質問者

お礼

YON56 さま ご回答ありがとうございます。 プリンターの名前を貼り付けたところ、印刷できました! ありがとうございます。 実は、その続きがありまして、印刷リストがあるのですが、その順番に沿って印刷してなくて困っています。(恐らくファイル容量順にソートされてしまう?) それを回避する案として、PDFを開いては閉じるというマクロを検索していたところ、YON56 さまのに出会いましたが、現象は同じでした・・・。 もし何か思いつく点がありましたら、ぜひお知らせください。 ひとまずこの質問に対しての回答は完璧にいただいたので、CLOSEするべきかもしれないですけど・・・。

yamayama456
質問者

補足

YON56さま YON56さまの時に回答されたmitarashiさまも、これを見て回答くださりました! つながりがすごいですね!! 感動しました。 皆さまそれぞれにベストアンサーを差し上げたかったのですが、 当初の「PDFが印刷されない」に対してお答えいただいた 元々の構文の作者さまでもあられますYON56さまに差し上げたいと思います。 ありがとうございました^^/

その他の回答 (3)

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.4

人気の無い元コードを書いた(切り貼りした)者です http://okwave.jp/qa/q8346776.html こんなのをみつけました。 http://support.microsoft.com/kb/891594/ja VBA側の問題ではなさそうですね。 MSのサイトの情報も時々リニューアルと称して消えてしまいますので、記しておきます。 試して無いので結果が出たら教えて下さい。 スプールに時間がかかる様になるかもしれませんので、Sleepのところのmsec数を調節願います。 >回避策 >ドキュメントを確実に順番通り印刷するためには >・「全ページ分のデータをスプールしてから 印刷データをプリンタに送る」 >・「スプールされたドキュメントを最初に印刷する」 >を ON に設定します。 なお、Windows7のサポートサイトを見ろと表示されたので、検索してみましたが見当たりませんでした。 Windows7の設定ダイアログの画像を添付いたします。

yamayama456
質問者

お礼

mitarashi さま ・全ページ分のデータをスプールしてから 印刷データをプリンタに送る →ONにチェック ・スプールされたドキュメントを最初に印刷する →元々ONだった Sleepのところのmsec数を調節は変更せず、1000のまま で、結果は・・・・・ *** 順番通りに印刷実行されました!! *** 「こんなのをみつけました。」と画像の添付で、内容も設定もすぐに分かりました。 本当にありがとうございます!! mitarashi さまもベストアンサーにしたいのですが、 当初の「印刷されない」問題を解決してくださった方に差し上げたいと思います。。。 今回の質問にご回答くだり、私にとって皆さまベストアンサーです。 本当にありがとうございますm(__)m

yamayama456
質問者

補足

mitarashiさま >人気の無い元コードを書いた(切り貼りした)者です mitarashiさま。。。。そんなことないですよ。 構文がちょっと長かったので^^; mitarashiさまやYON56さまにお会いできて光栄でした♪

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.3

途中から失礼します。 Sleep 1000 On Error Resume Next ←なんのため? BBB.Terminate 1秒おいてAcroRD32 をTerminate してますので AcroRD32は仕事を完遂する前に消えてしまっているのでは? 無駄な時間が増えますが、Sleep 5000 や10000 などとすれば 取りあえずは出力されるかも? なので、どん臭いけど多分確実な方法。 前提条件 PDFファイルをダブルクリックした時にアクロバットリーダーが立ち上がること。 Sheet1のA2からフルパスで下方に連続してリストがあること。 以下、標準モジュールに記載します。pdfPrint を実行してみてください。 Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub pdfPrint()   Dim i As Integer   Dim oShell As Object      i = 2   Do     Sheets("sheet1").Cells(i, 1).Activate     If ActiveCell.Value = "" Then       Exit Do     End If          If Dir(ActiveCell.Value) = "" Then       MsgBox ActiveCell.Value & "が見つかりません。中止します"       Exit Sub     End If     i = i + 1   Loop      i = 2   Set oShell = CreateObject("Shell.Application")   Do     Sheets("sheet1").Cells(i, 1).Activate     If ActiveCell.Value = "" Then       Exit Do     End If          Call oShell.ShellExecute(ActiveCell.Value, , , "print", vbNormalFocus)          Do Until NowPrinting(ActiveCell.Value) = True       Sleep 200       DoEvents     Loop          Do Until NowPrinting(ActiveCell.Value) = False       Sleep 500       DoEvents       Loop     i = i + 1   Loop      Set oShell = Nothing   MsgBox "おまたせ" End Sub Private Function NowPrinting(ByVal DocName As String) As Boolean   Dim strComputer As String   Dim objWMIService As Object   Dim colPrintJobs As Object      strComputer = "."   Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")   Set colPrintJobs = objWMIService.ExecQuery ("SELECT * FROM Win32_PrintJob")   If colPrintJobs.Count > 0 Then     NowPrinting = True   End If      Set colPrintJobs = Nothing: Set objWMIService = Nothing End Function 注意点 印刷する前に、自身や他のPCで印刷中で無い事 このPDF印刷が行われている間は、自身で他の印刷や他のPCでの印刷は行わないこと (誤動作します) その他 1ファイルの印刷が完了してから次に行きますので処理が遅いです。 (選択中のセルが移動するので進捗状況は分かるかと思います) 何時までたっても終わらない場合は、Ctrl + Brake で止めてください。 トナーや紙の無駄遣いをしても責任持てませんので悪しからず。

yamayama456
質問者

お礼

nicotinism さま 確実な方法の構文を教えてくださり、ありがとうございます。 スマートすぎたら初心者の私では手も足もでないので、 皆さまの回答を参考に、少しずつ勉強していきたいと思います。

回答No.1

提示されたマクロを書いたyon56です。 まさか私の書いたマクロを参考にして下さった方が在るなんて考えてもいませんでした。 何となく気恥ずかしいです。 このマクロは、参照設定にWindows Script Host Object Modelが有効になっていないと作動しません。 参照設定は、マクロが記述されたファイルのVBAエディターにて、ツール→参照設定とします。 このダイヤログボックスにて、 Windows Script Host Object Model(Excel2003では、かなり下の方にあります。)を探し、 チェック印を付けOKとします。 ちなみに、マクロが記述されたファイルを変更保存しないと、参照設定は保存されません。

yamayama456
質問者

お礼

YON56さま ご回答ありがとうございます。 でも、まだ印刷されないので、 よろしければ引き続きよろしくお願いいたします。

yamayama456
質問者

補足

YON56さま YON56さまからご連絡いただけて大変光栄です! 本当に驚きました!! そうです、YON56の最終報告をズバリいただきました^^; とてもスッキリされていて、初心者の私には手の入れようがありませんでした。 さて、教えてくださった通り、Windows Script Host Object Modelを有効にしましたが、やはり印刷実行されません。。。 現象は変わらず、PDFを開いて閉じて次へ進む です。 他に何か思い当たる点はございますでしょうか? 引き続きよろしくお願いいたします。

関連するQ&A

  • VBA 実行時エラー 2147024893

    下記のマクロを実行すると BBB.Save のところで、実行時エラー 2147024893(8007003)が発生します。 「ショートカット"C:\Documents and Settings\ユーザー名\MyDocuments\Documents and Settings\All Users\スタート メニュー\プログラム\スタートアップ\拡張子無しのファイル名.lnk"を保存できません。」 ヘルプをみると、オ-トメーションエラー(Error440)となっています。 いろいろ調べましたが解りません。助けて下さい。 Sub 自動起動設定() Dim AA, BB, CC, DD Dim AAA, BBB AA = ThisWorkbook.Path CC = ThisWorkbook.Name CC = Left(CC, Len(CC) - 4) Set AAA = CreateObject("WScript.Shell") DD = Left(AA, 2) & "Documents and Settings\All Users\スタート メニュー\プログラム\スタートアップ" Set BBB = AAA.CreateShortcut(DD & "\" & CC & ".lnk") BBB.targetPath = AA & "\" & ThisWorkbook.Name BBB.Arguments = "/n,/e," & AA & "\" BBB.WindowStyle = 1 BBB.WorkingDirectory = AA BBB.Save Set BBB = Nothing Set AAA = Nothing End Sub

  • PDF資料のセット印刷について

    いつもお世話になっております。 説明会用の資料を印刷し、セットしています。 しかし、200部、300部とセットするのが大変です。 そこで、印刷時にセットしておきたいと考えました。 エクセルのマクロで書きました。ウインドウズ7、エクセル2010です。 よろしくお願いします。 説明会の資料が7種類あります。 1と2は、両面白黒印刷、ホッチキス止め  13枚 3と4は、片面白黒印刷、ホッチキス止め  19枚 5  は、両面白黒印刷          両面で1枚 6  は、片面白黒印刷          1枚 7  は、片面カラー印刷         1枚 いろいろな掲示板で探したコードを書いてみました。 意味もあまりわかってないです。。。なので 5、6、7は、印刷できるのですが、3と4はタマにしか印刷できません。 なぜなのかわかりません。同じ環境で続けてマクロを実行しましたが 印刷できるときと、出来ない時があります。 1と2は、いつも印刷できません。 どうすればいいのか教えてください。 白黒印刷や、ホッチキス止めは、プリンターで設定しています。 プリンターの追加で5種類用意しました。 あと、1から7までを1セットとし、20セット印刷したいのですが どこでループをかけたらいいのかわかりません。 よろしくお願いします。 Sub 説明会資料PDF印刷() Dim AA Dim B1, B2, B3, B4, B5, B6, B7 Dim C1, C2, C3, C4, C5 Dim D1, D2, D3, D4, D5, D6, D7 Dim AAA As Object Dim BB1, BB2, BB3, BB4, BB5, BB6, BB7 Dim i As Long AA = "C:\Program Files\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe /t " B1 = "C:\説明会資料\説明会1.pdf" B2 = "C:\説明会資料\説明会2.pdf" B3 = "C:\説明会資料\説明会3.pdf" B4 = "C:\説明会資料\説明会4.pdf" B5 = "C:\説明会資料\説明会5.pdf" B6 = "C:\説明会資料\説明会6.pdf" B7 = "C:\説明会資料\説明会7.pdf" C1 = "DocuCentre-V C3375(両面白黒ホッチキス)" C2 = "DocuCentre-V C3375(片面白黒ホッチキス)" C3 = "DocuCentre-V C3375(両面白黒)" C4 = "DocuCentre-V C3375(モノクロ)" C5 = "DocuCentre-V C3375(カラー)" Set AAA = CreateObject("WScript.Shell") D1 = AA & """" & B1 & """" & " " & """" & C1 & """" Set BB1 = AAA.exec(D1) On Error Resume Next BB1.Terminate Set BB1 = Nothing D2 = AA & """" & B2 & """" & " " & """" & C1 & """" Set BB2 = AAA.exec(D2) BB2.Terminate Set BB2 = Nothing On Error Resume Next D3 = AA & """" & B3 & """" & " " & """" & C2 & """" Set BB3 = AAA.exec(D3) BB3.Terminate Set BB3 = Nothing On Error Resume Next D4 = AA & """" & B4 & """" & " " & """" & C2 & """" Set BB4 = AAA.exec(D4) On Error Resume Next BB4.Terminate Set BB4 = Nothing D5 = AA & """" & B5 & """" & " " & """" & C3 & """" Set BB5 = AAA.exec(D5) On Error Resume Next BB5.Terminate Set BB5 = Nothing D6 = AA & """" & B6 & """" & " " & """" & C4 & """" Set BB6 = AAA.exec(D6) On Error Resume Next BB6.Terminate Set BB6 = Nothing D7 = AA & """" & B7 & """" & " " & """" & C5 & """" Set BB7 = AAA.exec(D7) On Error Resume Next BB7.Terminate Set BB7 = Nothing Set AAA = Nothing End Sub

  • PDFファイルを開き、印刷し、閉じるマクロ

    Excel 2003 VBAにて、 PDFファイルを開き、印刷し、閉じるマクロを作りたいと思っています。 Dim AA, AAA AA = "C:\Program Files\Adobe\Reader 11.0\Reader\AcroRd32.exe C:\Scan\20131101160734050_001.pdf" AAA = Shell(AA, vbNormalFocus) にて、PDFファイルを開くことは出来ました。 このPDFファイルを、「印刷し、閉じる」ためには、 このPDFファイルを指定する必要があると思いますが、 その構文が判りません。 知っている方、教えて下さい。

  • VBAでCSVファイルを分割したい

    VBAを利用して、あるCSVファイルを一定のレコード数ごとに新しいファイルにファイル分割したいです。 やりたいことは、以下のようなイメージです。 関連サイトなどを参考に自分なりに取り組んでみましたが、なかなかうまくいきません。 VBAでなくても実現できそうですが、ここまでやったので勉強のためにもVBAでやりたいです。 サンプルコードなど教えていただけるとうれしいです。 ヒントでも結構ですので、よろしくおねがいします。 (2レコードずつ分割する例) sample.csv ヘッダ1,ヘッダ2,ヘッダ3,ヘッダ4 aaa@aa.aa,123,あいうえ,111-111 bbb@bb.bb,456,かきくけ,222-222 ccc@cc.cc,789,さしすせ,333-333 ddd@dd.dd,012,たちつて,444-444 eee@ee.ee,345,なにぬね,555-555 fff@ff.ff,678,たちつて,666-666 ↓↓↓ ☆sample_1.csv ヘッダ1,ヘッダ2,ヘッダ3,ヘッダ4   →各ファイルにヘッダも入れたいです。 aaa@aa.aa,123,あいうえ,111-111 bbb@bb.bb,456,かきくけ,222-222 ☆sample_2.csv ヘッダ1,ヘッダ2,ヘッダ3,ヘッダ4 ccc@cc.cc,789,さしすせ,333-333 ddd@dd.dd,012,たちつて,444-444 ☆sample_3.csv ヘッダ1,ヘッダ2,ヘッダ3,ヘッダ4 eee@ee.ee,345,なにぬね,555-555 fff@ff.ff,678,たちつて,666-666

  • VBAを使ってPDFを印刷すると1枚しか出てこない

    エクセルvbaを使って、PDFを印刷しようとしていますが、 セルC1・C2に記載してあるファイルの保存場所+ファイル名をリスト化してあるのですが、 2枚続けて印刷ができず、1枚だけが印刷されて終わってしまいます。 印刷される1枚は2枚目にあたります。 どうしたら2枚全てが印刷されるのでしょうか? エクセル2010で、vbaは初心者です。 ご存知の方、なにとぞ教えてください。 よろしくお願いいたします。 Sub PrintTest() Dim i As Long For i = 1 To 2 PrinterName = Application.ActivePrinter fileName = Range("C" & i + 1).Value Set myShell = CreateObject("WScript.Shell") myShell.Run ("AcroRd32.exe /t " & fileName) Next i End Sub

  • エクセルVBAでPDFを1枚目のみ印刷したい

    下記のVBAに複数PDFが重なっている場合は、一枚目のみ印刷する文面を 挿入したいのですがうまくいきません Sub Test() Dim z As Object Dim i As Long Dim f, p As String Application.ScreenUpdating = False Set z = CreateObject("WScript.Shell") p = Application.ActivePrinter For i = 1 To Range("A1").End(xlDown).Row f = "h:\hozei\" & 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 お忙しいところ申し訳ございません どなたかご教示願います。

  • awkで別のファイルを参照して、検索結果を得たい。

    awk初心者です。 あるファイル(targetファイル)に、どのような属性があるのかを検索ファイル(objectファイル)を 使って調べたいのです。そこでawkを使って: targetファイル 5 a c objectファイル 1,aa 2,bb 3,cc 4,dd 5,aa 6,bb 7,cc 8,dd 9,aa 10,bb a,cc b,dd c,aa d,bb e,cc f,dd g,aa h,bb i,cc j,dd 以下のようなスクリプトを作成し mawk32 -f スクリプト target.txt object.txt としたのですが、動作しません。 何らかの御助言を頂ければ幸いです。 #targetファイル読み込み FILENAME == ARGV[1]{ dat1[FNR]=$1 no_dat1 = FNR } #objectファイル読み込み FILENAME == ARGV[2]{ dat2[FNR]=$0 no_dat2 = FNR } #相互に検索 END{ for (i = 1; i <= no_dat1; i++){ for (j = 1; j <= no_dat2; j++){ if (dat1[i]~/dat2[j]/) { print dat1[i],dat2[j] } }}}

  • 【VBA】任意のファイルの一括操作について

    こちらの識者の方々にはいつもお世話になっております。 VBAで教えていただきたいことがあり質問いたします。 C:\aaa\に下記のexcelファイルがあります。 【見本】東京.xls 【見本】埼玉.xls 【見本】神奈川.xls 【見本2】千葉.xls これを 1.C:\bbb\へコピーし、 2.ファイル名の【見本】と【見本2】の文字列を削除し、 3.拡張子の前に本日の日付をyyyymmdd形式で追加し、 4.それぞれのexcelファイルのsheet1のa1セルにyyyymmdd形式で本日の日付を入力する。 というマクロを組みたいと思っています。 一つ一つnameステートメントでファイル名を変更したり、 open→Range("A1").Value→closeとやってもできるんですが、 条件もすこぶる単純ですし、一括でできるようなコードはないかと思っています。 最終的な期待するファイルのフルパスは↓のようになります。 C:\bbb\東京20130426.xls C:\bbb\埼玉20130426.xls C:\bbb\神奈川20130426.xls C:\bbb\千葉20130426.xls C:\bbb\へコピーするところまでは調べてできたのですが、 その先がこれというものを見つけられず。 どなたかご教示いただけないでしょうか。 宜しくお願い致します。 Sub Test() Dim objFSO As FileSystemObject Const cnsSOUR = "C:\aaa\*.xls" Const cnsDEST = "C:\bbb\" Set objFSO = New FileSystemObject objFSO.CopyFile cnsSOUR, cnsDEST, True Set objFSO = Nothing End Sub

  • vbaを使ってエクセルリストからPDFを印刷する

    エクセルシートA列に"ファイル場所+ファイル名.pdf"を合体させたリストを作成しました。 リストの上から順にPDFファイルを開き印刷するコードを作成しました。 印刷はされますが、リストの順番に印刷されず、ものすごくランダムに印刷されてしまいます。 このエラーについて、 「次々に実行させるから、ファイルの容量順に印刷されてしまうのでは? PDFを開いて、一旦閉じるコードを入れればよいのでは?」 というアドバイスをもらいましたが、どう対応したらよいか分かりません。 他に考えられる原因があるかもしれません。 教えて下さい。よろしくお願いします Dim i As Long 'セルC2に繰り返し数(ファイルの数)が入力されています For i = 1 To Range("C2").Value 'セルB**に印刷フラグを立て、「空欄」なら印刷、「1」なら印刷しないとしています '印刷フラグ「空欄」は印刷実行 If Cells(i + 1, 2).Value = "" Then PrinterName = Application.ActivePrinter fileName = Range("A" & i + 1).Value Set myShell = CreateObject("WScript.Shell") myShell.Run ("AcroRd32.exe /t " & fileName) '印刷フラグ「1」は印刷しない ElseIf Cells(i + 1, 2).Value = "1" Then End If Next i End Sub

  • VBAのcountif

    ここで質問させていただき、配列に必要なデータを入力する所までは出来ました。 次に各行ごとの"OK"の数をカウントしたいのですが、どのように記述すればよいのでしょうか? Sub count0(a, b, c, d, e)  Dim i1 As Long  Dim i2 As Long  Dim A1 As String  Dim bb As Variant  Dim cc As Variant  Dim dd As Variant  Dim ee As Variant  Dim myLastRow As Long  Sheets(a).Select  myLastRow = Cells(Rows.Count, 1).End(xlUp).Row + 1  bb = Range(b).Resize(myLastRow, 6)  cc = Range(c).Resize(myLastRow, 6)  dd = Range(d).Resize(myLastRow, 6)  ee = Range(e).Resize(myLastRow)  For i1 = 1 To myLastRow   For i2 = 1 To 6    If bb(i1, i2) = "" Then      A1 = "NG"     ElseIf bb(i1, i2) = "A1" Or cc(i1, i2) = "A1" Then      A1 = "-"     ElseIf bb(i1, i2) = cc(i1, i2) Then      A1 = "OK"     Else      A1 = "NG"    End If    dd(i1, i2) = A1   Next i2 '配列をカウントするこの行以降の記述が良く分かりません。   ee(i1) = Application.WorksheetFunction.CountIf(dd(), "OK")  Next i1  Range(e).Resize(myLastRow) = ee End Sub

専門家に質問してみよう