みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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を使用しています。
どなたかご存じでしたら、ぜひお教え下さい。
よろしくお願いします。

投稿日時 - 2013-11-13 11:43:59

QNo.8345578

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

-------
まず…
-------
いろいろ質問の中にキーワードがあります。
その中で「自力で学ぶべき」と思う部分もあるので、あえてその部分のコードは書きません。
ただこちらが省略した部分で、質問者さんが自力で解決できない部分があった場合、「目的達成の質問の丸投げ」ではなく、
・目的の全体像について
・その中で行き詰っている部分
・エラーが発生しているのであれば、それに関係すると思われるコード抜粋と、エラー内容
を載せて、再質問を行ってください。


-----------------
各キーワードから
-----------------
>連続印刷
「シートの値が垂直方向に存在する間」というループを行う繰り返し処理の実装が必要です。

>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

投稿日時 - 2013-11-13 14:57:17

お礼

1050YEN さま

ご丁寧にどうもありがとうございます。
目的達成の質問の丸投げしてすみませんでした。
回答を見ながら1つずつ、自分の力で作れていけそうです。
行き詰ったら、また質問します。
ありがとうございました。

投稿日時 - 2013-11-13 15:49:47

あなたにオススメの質問