はじめに
Adobe Reader をコマンドライン起動してPDFファイルの表示と印刷をする関数型VBAモジュールが
別サイトで公開されています。
公開サイト、及びダウンロード
Adobe Reader で PDF 文書を表示 / 印刷する方法
機能の概要
- VBAモジュール内の関数を使用することで簡単にAdobe Readerをコマンドライン操作できます。
- このモジュールでPDFファイルの表示と印刷がAcrobat Readerを使用して出来ます。
- Adobe Reader のバージョンを自動判別して処理します。
※レジストリ情報より判別。 - Word 2000、Excel 2000、Access 2000用の3種類のVBAモジュールが用意されています。
※上位バージョンでの使用は可能。但し動作確認は必要。
PDFの表示(OpenPdf 関数)
引数と内容
- FilePath: PDFファイルのフルパス
- Page:PDFファイル表示時のページ番号 (1~)
- Comment:PDFファイル表示時に移動したいコメントID
- Zoom:表示倍率。単位はパーセント。省略時は環境設定に従う。
- PageMode:PDFファイル表示時にサムネイル又はしおり表示を指定。省略時はどちらも無し。
- ScrollBar:PDFファイル表示時にスクロールバーの表示を指定。省略時は自動。
- Search:PDFファイル表示時に検索する語句を指定。複数語の検索可能。
- ToolBar:PDFファイル表示時にツールバー表示を指定。
- NavPanes:PDFファイル表示時にナビゲーションパネルの表示を指定。
- View:PDFファイル表示時の表示オプションを指定。省略時は環境設定に従う。
全体表示 / 幅に合わせて表示 / 高さに合わせて表示 / 描画領域の幅に合わせて表示
/ 右に90°回転 / 左に90°回転 - WindowStyle:当関数内部で使用している Shell 関数の第二引数 windowstyle と同一。
戻り値:Acrobat Reader実行に問題がある時に数値のゼロを返します。
内部的に呼び出している Shell 関数の戻り値と同一 (タスク ID) 。
PDFの印刷(PrintPdf 関数)
引数と内容
- FilePath:PDFファイルのフルパス
- PrinterName:印刷に使用するプリンタ名。省略時は既定のプリンタで印刷。
DriverName:ドライバ名
PortName:ポート名 - ShowPrintSettings:印刷設定ダイアログを表示するかを指定。
戻り値:詳細はココを参照。
印刷時には、ウィンドウは表示されません。
印刷後、Adobe Reader は自動的に終了します。
関数の使用サンプル
001 Private Sub CommandButton1_Click()
002 On Error GoTo Err:
003 Dim dRet As Double '戻り値
004 'PDFファイルを画面表示する
005 dRet = AdobeReader.OpenPdf(FilePath:="c:\work\execMenuItem.pdf")
006 'Excelを最前列に表示
007 AppActivate Application.Caption
008 If dRet = 0 Then
009 'OpenPdf関数でエラー発生
010 MsgBox "OpenPdfでシステムエラーが発生しました" & vbCrLf & _
011 "システム担当者へ連絡してください。", vbOKOnly + _
012 vbCritical + vbApplicationModal, "システムエラー"
013 Else
014 '正常終了
015 MsgBox "OKです", vbOKOnly, "正常終了"
016 End If
017 Exit Sub
018
019 Err:
020 Dim strMsg As String
021 strMsg = "以下の内容をシステム担当者へ連絡してください。" & _
022 vbCrLf & "エラー番号:" & Err.Number & _
023 vbCrLf & "エラー内容:" & Err.Description
024 'エラーのメッセージボックスを表示
025 MsgBox strMsg, vbOKOnly + vbCritical + vbApplicationModal, "システムエラー"
026 End Sub
Highlight:プログラミング言語のソースコードを構文で色分け (GUI編)
詳細
▼詳細は以下を参照して下さい。
Adobe Reader で PDF 文書を表示 / 印刷する方法
▲注意事項もあるので必ず上記サイトページをご覧ください。
感謝
この様なすばらしいVBAモジュールを公開して頂いた配布サイト様に感謝いたします。
※当紹介記事の掲載は公開サイト・管理人様より承諾を得ました。m(_._)m
< サンプル一覧 >
管理人さん
はじめまして
エクセルVBAの初心者です。
約20種類ほどあるAdobe PDFファイルをエクセル内の
ファイル名のデータより数種類のPDFファイル選択し、
エクセル内の発行部数指示にもとづき印刷をしたいのですが・・・・
WEBにて調べていますが、どうもうまく行きません。
何とかなりませんか?よろしくお願いします。
環境
Windows XP
Adobe Acrobat 4.0
Adobe Reader XI
daicyan さん。
初めまして。
>・・・どうもうまく行きません。
この様な場合、技術系のサイトへの質問は以下でお願いします。
・(VBA)ソースの内容
・エラーが出る箇所/何行目のどの命令
・エラーメッセージの内容
・環境:出来ればExcelのバージョンもお願いします。
上記の3点が分からないと返答する範囲が大きすぎて無理があります。
しかし、やりとり時間がもったいないので、
予測の範囲で返答させて頂きます。
①
http://www.f3.dion.ne.jp/~element/msaccess/AcTipsAdobeReader.html#DL
又は
https://app.box.com/shared/jisind0q7l
から AdobeReaderDemo.zip をダウンロードして下さい。
そして AdobeReaderDemo.xls を解凍します。
このExcelファイルは当サイトページで紹介しているPDFを簡単に印刷する関数が入っています。当関数は別サイトの人から公開された物です。
② 上記のAdobeReaderDemo.xlsファイルに
問題のシートと作成したVBAを貼り付けて下さい。
③ 印刷時のVBA命令の例:
AdobeReader.PrintPdf FilePath:="D:\AAA.pdf"
上記はデフォルト・プリンターに印刷されるはずです。
部数指定は無いので、必要な部数だけ命令を実行します。
解決につながれば幸いです。
管理人さん
ご返事ありがとうございます。
Demoをダウンロードし、やっとPDFファイルを開き、印刷することができました、印刷部数はやはり手入力しなければならないのでしょうか?
管理人さん はじめまして
このサイトのおかげでEXCEL VBAで大量のPDFデータの中から条件検索(PDFのファイル名)をかけて合致したPDFを固めて表示することができるようになりました。
今、悩んでいるのは、VBAで任意の場所に赤い太線を引いたPDFを表示できないか、ということです。赤い太線はAcrobatの高度な編集の線ツールを用いれば引けますが、VBAの中で線ツールを使いたいのです。これにより利用者が表示されたPDFのどこを見ればよいかという情報を指定するためです。
環境はAcrobat8を基本にしておりますが、windows 7になったことに伴いEXCELも2010になりその中でかろうじて動いております。念のためAcrobatXも購入しております。
よろしくお願いします。
でふぉー さん。
はじめまして。
>・・赤い太線はAcrobatの高度な編集の線ツールを・・
たぶん目的とする所は、Acrobat8ではメニューの[ツール] ->[注釈]を使った場合ではないでしょうか。
・ハイライトテキスト
・下線の表示
・テキストボックス
等が可能です。
「注釈」機能ならVBAからOLE経由で間接的に編集が可能です。
AFormAut : ExecuteThisJavascript メソッド
上記のサンプル②を御覧ください。
目的とするPDFに対してAcrobat JavaScriptを実行して、注釈のハイライトテキストを設定しています。
Acrobat JavaScriptが使えないと出来ないと言うハードルは有りますが、
当サイトで紹介しているOLE機能では出来ない部分をかなりカバー出来ます。
※上記OLE機能はAcrbat8では正常に動作しません。AcrobatXをご使用下さい。
※Acrobat JavaScriptに関しては勉強中なので質問はご遠慮下さい。
※Acrobat JavaScriptに関してはAdobeの質問フォーラムへお願いします。
>・・利用者が表示されたPDFのどこを見ればよいかという情報を指定するため・・
それには注釈一覧と言う機能を使えば該当するベージにも1クリックで表示が可能です。
そう言う意味でも注釈の機能を使った方が良いのではと思います。
あくまでも、ご提案です。
「高度な編集」の使用に関しては不明ですが。
PDF上にボタンやチェックボックス等の設定でしたらVBAからも出来ます。
AFormAut オブジェクト 一覧
上記ページ内容は未完成ですが、サンプル等を見ればある程度は出来るかと思います。
解決につながれば幸いです。
管理人さん
デフォーです。
返事が遅れてすみません。
AFormAutオブジェクトで出来るかどうか、試してみます。
ありがとうございました。