- 締切済み
PDFとエクセルシートを連続印刷する方法
エクセルVBAを利用して、PDFとエクセルファイル(シート名指定あり)の混載するリストを参照し、 連続印刷する方法を教えてください。 印刷リストとして、 A列にファイルタイプ(xlsかPDFか) B列にファイル場所 C列にファイル名 D列にシート名 E列にする/しないの印刷フラグ を記し、 PDFの場合はファイル場所とファイル名を参照して印刷、 xlsの場合はシート名まで指定して印刷するという処理を書きたいのです。 添付の画像を参照すると、印刷するのは E:\test\111.pdf E:\test\222.pdf E:\test\222.pdf E:\test\Book1.xlsのSheet1 ・ ・ ・ となります。 A列に「判別」としたのは、PDFかエクセルかを見分けるのに必要かなと思って設けました。 リストはイメージなので、必要であれば編集しできます。 全てのファイルをPDFにしてしまえば良いのですが、 それは理由があってできないのです。 VBA初心者で、エクセル2010を使用しています。 どなたかご存じでしたら、ぜひお教え下さい。 よろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
------- まず… ------- いろいろ質問の中にキーワードがあります。 その中で「自力で学ぶべき」と思う部分もあるので、あえてその部分のコードは書きません。 ただこちらが省略した部分で、質問者さんが自力で解決できない部分があった場合、「目的達成の質問の丸投げ」ではなく、 ・目的の全体像について ・その中で行き詰っている部分 ・エラーが発生しているのであれば、それに関係すると思われるコード抜粋と、エラー内容 を載せて、再質問を行ってください。 ----------------- 各キーワードから ----------------- >連続印刷 「シートの値が垂直方向に存在する間」というループを行う繰り返し処理の実装が必要です。 >E列にする/しないの印刷フラグ ループ内の印刷メイン処理を行う/スキップするの判定処理が必要です。 >B列にファイル場所 >C列にファイル名 ファイルの存在チェックが必要です。 >A列にファイルタイプ(xlsかpdfか) 印刷メイン処理を実行し、その中で処理を分岐します。 →PDFのとき ・PDF印刷を行う(以下サンプルを参照) →XLSのとき ・XLS印刷を行う(以下サンプルを参照) ------------------ PDFの印刷方法 ------------------ PDF印刷呼び出し方法は以下の文字列を結合して、実行する。 (1)「AdobeReder(acrobat)のexeのパス」 (2)[/s /t]の文字列オプション (3)「印刷対象のPDFのフルパス」 Sub pdf_print_sample() Dim l_strReader As String Dim l_strPrmOpt As String Dim l_strPrmPdf As String Dim l_strCmd As String l_strReader = """C:\Program Files (x86)\Adobe\Reader 10.0\Reader\AcroRd32.exe""" l_strPrmOpt = "/s /t" l_strPrmPdf = """C:\test\123.pdf""" l_strCmd = l_strReader & " " & l_strPrmOpt & " " & l_strPrmPdf Call Shell(l_strCmd) End Sub --------------------------- エクセルシートの印刷方法 --------------------------- エクセルシートオブジェクトの「PrintOutメソッド」を実行するだけです。 サンプルはマクロが記載されているワークブックのSheet2を対象にしていますが、本来は ・対象ワークブックを開く ・対象ワークブック配下の印刷対象ワークシートを捕まえる ・ワークシートの印刷を実行 ・対象ワークブックを閉じる という流れになります。 Sub xls_print_sample() Dim l_xlsBook As Excel.Workbook '『印刷対象のワークブック』変数 Dim l_xlsSheet As Excel.Worksheet '『印刷対象のワークシート』変数 '【マクロが記載されている本ワークブック】を『印刷対象のワークブック』とする Set l_xlsBook = ThisWorkbook '【『印刷対象のワークブック』の"Sheet2"】を『印刷対象のワークシート』とする Set l_xlsSheet = l_xlsBook.Worksheets("Sheet2") '『印刷対象のワークシート』を印刷実行 l_xlsSheet.PrintOut End Sub
お礼
1050YEN さま ご丁寧にどうもありがとうございます。 目的達成の質問の丸投げしてすみませんでした。 回答を見ながら1つずつ、自分の力で作れていけそうです。 行き詰ったら、また質問します。 ありがとうございました。