• ベストアンサー

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ファイルを指定する必要があると思いますが、 その構文が判りません。 知っている方、教えて下さい。

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

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

#3です。 WShell.Execを使うと閉じる事ができる様ですが、色々と気難しくて苦労しました。 まず、なぜかAdobe Reader/Acrobatのフルパスを与えないと、ファイルがみつからないとゴネます。 Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub test() printPdf2 GetDesktopPath & "\test.pdf", "DocuWorks Printer", "DocuWorks Printer Driver" ' printPdf2 GetDesktopPath & "\test.pdf" End Sub Sub printPdf2(pdfDocument As String, Optional printerName As Variant, Optional printerDriver As Variant) Dim cmdLine As String Dim WShell As Object Dim oExec As Object 'ここは調整の必要がありそう Const waitTime As Long = 1000 'Windows7 Home 64bitの場合です Const pgmFullPath As String = "C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe" Set WShell = CreateObject("WScript.Shell") If IsMissing(printerName) Or IsMissing(printerDriver) Then cmdLine = "pgmFullPath /n /s /o /h /t ""pdfFullPath""" cmdLine = Replace(cmdLine, "pgmFullPath", pgmFullPath) cmdLine = Replace(cmdLine, "pdfFullPath", pdfDocument) Else cmdLine = "pgmFullPath /n /s /o /h /t ""pdfFullPath"" ""printerName"" ""printerDriver""" cmdLine = Replace(cmdLine, "pgmFullPath", pgmFullPath) cmdLine = Replace(cmdLine, "pdfFullPath", pdfDocument) cmdLine = Replace(cmdLine, "printerName", printerName) cmdLine = Replace(cmdLine, "printeDriver", printerDriver) End If Debug.Print cmdLine Set oExec = WShell.exec(cmdLine) Sleep waitTime 'Windows7Home/64bit環境ではここで実行時エラーが出るので無理矢理先に進めていますが 'Adobe Readerは閉じられる様です On Error Resume Next oExec.Terminate Set WShell = Nothing End Sub Private Function GetDesktopPath() As String Dim wScriptHost As Object, strInitDir As String Set wScriptHost = CreateObject("Wscript.Shell") GetDesktopPath = wScriptHost.SpecialFolders("Desktop") Set wScriptHost = Nothing End Function Terminateで原因不明のエラーが出るのでWebを漁っいて下記をみつけました。64bit環境でエラーが出るのはこれも関係しているのでしょうか?少々無理をしている様なので、ご使用時はご注意下さい。 Terminate メソッドは最後の手段としてのみ使用します。これは、アプリケーションによっては適切にクリーンアップできない場合があるためです。通常は、プロセスを途中で中断せず、プロセス自身で実行を終了させるようにします。Terminate メソッドは WM_CLOSE メッセージを使ってプロセスを終了しようとします。これで終了できない場合は、通常のシャットダウン手順を実行せずに、プロセスを強制終了します。 http://msdn.microsoft.com/ja-jp/library/cc364387.aspx

YON56
質問者

お礼

度重なるご教示ありがとうございました。 やっと完成しました。 お答えいただいたtest()とPrivate Function GetDesktopPath() As Stringの意味が理解できず正直苦しみました。 VBAの参照設定のなかで、 Windows Script Host Object Model を追加せよとのことなんですよね。 Sleep関数の使い方は以前より知っていたのですぐ理解できました。 完成品を見て頂きたく、記載させてもらいます。 Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub PDF() Dim AA, BB, CC, DD Dim AAA, BBB AA = "C:\Program Files\Adobe\Reader 11.0\Reader\AcroRd32.exe /t " BB = "C:\Scan\MX-4111FN_20131003_162711.pdf" CC = "RICOH MP C6003 白黒" DD = AA & """" & BB & """" & " " & """" & CC & """" Set AAA = CreateObject("WScript.Shell") Set BBB = AAA.exec(DD) Sleep 1000 On Error Resume Next BBB.Terminate Set BBB = Nothing Set AAA = Nothing End Sub 本当にありがとうございました。

その他の回答 (3)

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

このViewの中に同様の質問が二つあるのに、灯台もと暗しというか面白いですね。質問者様のコードに、コマンドラインオプションを追加するだけなのですが、関数化したので使いやすいかもしれません。 プリンター及び同ドライバ名は環境に合わせて下さい。指定しなければWindowsの標準プリンタに出力されます。 Sub test() printPdf (GetDesktopPath & "\" & "test.pdf") End Sub Sub printPdf(pdfFullPath As String) Dim objWShell As Object Dim cmdLine As String Dim printerName As String Dim driverName As String printerName = Chr(34) & "DocuWorks Printer" & Chr(34) driverName = Chr(34) & "DocuWorks Printer Driver" & Chr(34) Set objWShell = CreateObject("WScript.Shell") cmdLine = "AcroRd32.exe /n /s /o /h /t " & pdfFullPath & " " & printerName & " " & driverName objWShell.Run cmdLine, VbNormalFocus, True '連続実行時の誤動作が少ないことを期待して同期動作にしています。 Set objWShell = Nothing End Sub 'これは試験の便宜上 Private Function GetDesktopPath() As String Dim wScriptHost As Object, strInitDir As String Set wScriptHost = CreateObject("Wscript.Shell") GetDesktopPath = wScriptHost.SpecialFolders("Desktop") Set wScriptHost = Nothing End Function

参考URL:
http://pdf-file.nnn2.com/?p=222
YON56
質問者

お礼

貴重なマクロ構文を教えていただきありがとうございます。 試したところ、印刷まではできましたが アクロバットリーダー本体が閉じてくれません。 No2の方へのお礼欄に書きましたマクロ「SSS」と同じ状況です。 今一度ご教示をお願いします。

  • web2525
  • ベストアンサー率42% (1219/2850)
回答No.2

参照先が繋がっていた No1回答の Adobe Reader で PDF ファイルを表示 / 印刷する方法 http://pdf-file.nnn2.com/?p=752http://www.f3.dio … ↓ http://pdf-file.nnn2.com/?p=752 http://www.f3.dion.ne.jp/~element/msaccess/AcTipsAdobeReader.html です

YON56
質問者

お礼

2度に渡るご回答ありがとうございます。 色々な関係サイトをご紹介頂き勉強になりました。 Sub SSS() Dim AA, AAA AA = "C:\Program Files\Adobe\Reader 11.0\Reader\AcroRd32.exe C:\Scan\MX-4111FN_20131003_162711.pdf" AAA = Shell(AA, vbNormalFocus) SendKeys ("^P"), True SendKeys "{ENTER}" SendKeys "%{F4}" End Sub では、PDFファイルが開くのみで、SendKeysが機能しませんでした。 そこで、知恵を絞りbatファイルを利用することにして、 Sub TTT() Dim AA, AAA AA = "START AcroRd32.exe /t ""C:\Scan\MX-4111FN_20131003_162711.pdf"" ""RICOH MP C6003 白黒"" ""50.28.99.211""" AAA = "C:\XXX.bat" Open AAA For Output As #5 Print #5, AA Close #5 AAA = Shell(AAA, vbNormalFocus) End Sub を作りました。 印刷まではできましたが、アクロバットリーダー本体を閉じることができません。 いま少し、お知恵を拝借させてください。

  • web2525
  • ベストアンサー率42% (1219/2850)
回答No.1

PDFファイルの印刷はReader上で行うので、Excelから直接実行はできません VBAから実行するにはSendKeysでReaderを操作するのが一番簡単な方法 Readerがアクティブの状態で SendKeys "^p", True SendKeys "{ENTER}" この2つを実行すれば印刷が始まります SendKeysに関しては下記サイト参照 http://officetanaka.net/excel/vba/statement/SendKeys.htm http://www.moug.net/tech/exvba/0150016.html 終了動作もReaderがアクティブの状態で SendKeys "%{F4}" で終了できます ----- その他の方法として Adobe Reader で PDF ファイルを表示 / 印刷する方法 http://pdf-file.nnn2.com/?p=752http://www.f3.dion.ne.jp/~element/msaccess/AcTipsAdobeReader.html 標準モジュール AdobeReaderは https://app.box.com/shared/jisind0q7l ↑ ココでダウンロードしたエクセルファイルに組み込まれています 私も、はじめ内容がよくわからなかったけど、Reader開かずにVBA上から直接印刷できるなど、理解できると結構便利に使えます

関連するQ&A

  • エクセルVBAでPDFを開く

    以下のような記述でアクロバットリーダーは立ち上がるのですが、 「この文書を開くときにエラーが発生しました。このファイルが見つかりません」 と出てきてしまいます。 どのようにしたら開いてくれるのでしょうか? Sub test3() Dim P As String P = "\\C:\AAA\sample.PDF" Shell "C:\Program Files\Adobe\Reader 11.0\Reader\AcroRd32.exe" & " " & P, vbNormalFocus End Sub

  • 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

  • VBAからAcrobat 8.0でPDFファイルを開く

    こんにちは Acrobat 7.0ですとShell起動できるのですが、Acrobat 8.0ですと起動できません。 Shell(pathname[,windowstyle]) pathnameにはプログラム名 + 表示するファイル名を指定しています。 具体的には"C:\Program Files\Adobe\Acrobat 7.0\Reader\AcroRd32.exe C:\Work\PDF1.pdf" です。 8の場合は "C:\Program Files\Adobe\Acrobat 8.0\Reader\AcroRd32.exe C:\Work\PDF1.pdf" としています。 Adobe Readerの枠は表示されエラーメッセージとして2回続けて出ます。 一つ目は"この文書を開くときにエラーが発生しました。ファイルエラーが発生しました。」です。 ふたつ目は「この文書を開くときにエラーが発生しました。このファイルが見つかりません。」です。 これからすると、文書ファイルのフォルダ・ファイル名指定が間違っていると考えられますが、同じ文書指定で7ではOKです。 8の場合指定の仕方が違うのでしょうか? WEBで検索したのですが、同じようにして開いていることが出ていて開けないことが解りません。 アドバイスお願いいたします。

  • vba pdfを手前に開きたい  Shell

    Sub Sample() Dim myFile As String myFile = "C: \test.pdf" Shell """C:\Program Files (x86)\Adobe\Reader 10.0\Reader\AcroRd32.exe"" " & myFile End Sub vbaからこれでPDFファイルを開くことができるのですが アクセスの後ろで開いてしまいます。 このコードを実行したら、開いたPDFファイルを画面の手前に表示したいので 何を付け足せばいいのでしょうか?

  • vbaでpdfを開く方法

    Sub test() Dim myFile As String myFile = "C:\Users\ダミー.pdf" Shell """C:\Program Files (x86)\Adobe\Reader 10.0\Reader\AcroRd32.exe""" & myFile End Sub これでいけるかと思ったのですが、AdobeReader自体は起動するのですが、肝心のファイルは開きません。 エラーにもなりません。 Program Files (x86)の中身を確認しても、バージョンは10で正しいようです。 AdobeReaderを起動するだけではなく、ファイルを開く方法を教えてください。

  • pdfをvbaで開いて、さらにサイズを指定する

    pdfをvbaで開いて、さらにサイズを指定することは可能ですか? Sub Sample() Dim myFile As String myFile = "C:\\問い合わせ.pdf" Shell """C:\Program Files (x86)\Adobe\Reader 10.0\Reader\AcroRd32.exe"" " & myFile End Sub これでPDFを開くことは出来るのですが 縦横、高さ、幅を指定したいのですが、可能ですか?

  • 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

  • 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

  • EXCElのVBAからPDFを開き印刷する。

    エクセルのフォームからダイヤグロボックスを開いて、pdfファイルを選択し開き印刷したいのですが、いろいろやったのですが、ファイルが開きません。単純にファイル名を指定して開き印刷するのは出来るのですが。ダイヤグロボックスから開きたいのでどなたかご指導いただけませんか? 1.直接アクロバットリーダーからファイルを開き印刷   Private Sub CommandButton2_Click()    PrinterName = Application.ActivePrinter    Filename = "C:\○○\××××.pdf" Set myShell = CreateObject("WScript.Shell") myShell.Run ("AcroRd32.exe /t " & Filename) End Sub 2.ダイヤグロボックスからファイルを開く Private Sub microbe_Click() ChDrive "R" ChDir "R:\○○\××\△△" OpenFileName = Application.GetOpenFilename("PDF Documents,*.pdf")   ??? end sub よろしくお願いします。

  • PDFファイルが印刷されません。

    PDFファイルが印刷されません。 相手から、そのホ-ムページ上のPDFファイルから印刷せよ、との指示です。 しかし、PDFファイル画面上部のアイコンの中から、「PDFファイルを印刷」をクリックしても、ファイルの印刷コマンドから行っても、印刷画面が直に消えてしまい、プリンタは全く動き出しません。 PDFファイルを右クリックして、文書のプロパティを出すと、 ファイルサイズ  1MB アプリケーション Adobe Illustrator C53 と書かれています。 なお、私のPCは、WINDOWSのXP、IE8で、Adobe Reader9が入っています。プリンタはCANONのPIXUSです。 エクセルやワードは印刷できます。   どうすれば、印刷ができるでしょうか? どなたか、宜しく教えてください。

専門家に質問してみよう