こんにちは。
今日はExcelVBAのお話です。
皆さん、例えば会社の先輩に
「このフォルダの中のPDFファイル、全部印刷かけておいて」
なんていわれることないですか??
・・・そうそうないですよね(笑)
今回実は私自身が
「フォルダ内のPDFファイルを一括で印刷する」 という作業が
どうしても必要になってしまったのです(^-^;)
あるフォルダの中にたくさんのPDFファイルが存在します。
これを印刷する為には、そのファイルを一つずつ開いて
印刷を掛けて・・・の繰り返しになります。
ファイルが5個や10個くらいなら、多少面倒でも
やれないことはないですよね。
でもそのファイルの数が30個や、はたまた100個だったら・・・
一日終わってしまいます・・・。
そこで、この開いて印刷するという「繰り返し」部分を
VBAでどうにかならないかということで
色々調べた上で、実行できたものが下記となります。
何を言っているのかわからない部分も多いと思いますが
わかる必要は特にありません(笑)
もし同じ状況になったら、ここにあるコードを
コピーペーストしてお使いください♪
今回は、マシンのデスクトップに【問題集】というフォルダがあり
そのフォルダ内のPDFファイルを印刷するという前提で作成されていますので
ご自身で利用するときには、フォルダの場所を変えてあげれば使えます♪
—————————–
Sub フォルダ内PDFファイル一括印刷()
Dim strPath As String
Dim strFileName As String
Dim pdffiles() As String
Dim intcount As Integer
‘変数strPathに、フォルダのパスを格納
strPath = “C:\Documents and Settings\isa\デスクトップ\問題集\”
‘変数strFileNameに、フォルダ内のファイル名を格納
strFileName = Dir(strPath)
‘フォルダ内のファイルがなくなるまでLoop
Do Until Len(strFileName) = 0
‘ファイル名の右から3文字が”pdf”かどうか判別
If Right(strFileName, 3) = “pdf” Then
‘pdffilesにその時のファイル名を取得し配列として格納
ReDim Preserve pdffiles(intcount)
pdffiles(intcount) = strFileName
‘pdffiles(0)・pdffiles(1)というようにファイルの数だけ
‘配列のインデックス番号が増えて管理できるようにするため+1する
intcount = intcount + 1
End If
‘一度Dir関数で取得されたファイルは取得されないようにする処理
strFileName = Dir()
Loop
‘——————————————
‘ここまでの処理でpdffilesという配列には
‘ファイルの数だけ配列が出来上がっている状態
‘——————————————
‘——————————————
‘ここから下はpdffilesという配列に入っている
‘ファイルを順番に印刷をかける処理
‘——————————————
Dim AcroExchApp As Object
Dim AcroExchPDDoc As Object
Dim AcroExchAvDoc As Object
Dim buf As Long
Set AcroExchApp = CreateObject(”AcroExch.APP”)
Set AcroExchPDDoc = CreateObject(”AcroExch.PDDoc”)
Set AcroExchAvDoc = CreateObject(”AcroExch.AVDoc”)
buf = AcroExchApp.Show
Dim i As Integer
For i = 0 To UBound(pdffiles)
buf = AcroExchAvDoc.Open(strPath & pdffiles(i), “”)
Set AcroExchPDDoc = AcroExchAvDoc.GetPDDoc()
‘開いたPDFファイルのページ数をnumPageに格納
Dim numPage As Long
numPage = AcroExchPDDoc.GetNumPages
‘PrintPagesで印刷をかける
‘プリンタはデフォルトのプリンタで、印刷のダイアログボックスは
‘表示されない
‘以下のステートメントは開いたPDFファイルの
‘最初のページから最後のページまでを印刷をかけるもの
‘また戻り値は「-1」ならうまく機能している
‘「-1」以外はPDFファイルが開いていないときに返される戻り値
buf = AcroExchAvDoc.PrintPages(0, numPage - 1, 2, 0, 0)
‘一行上のステートメントで「-1」以外の戻り値の場合は
‘ファイルが開かれていないときにおきるので
‘変数bufが「-1」以外だったら印刷失敗というメッセージを出すようにしている
If buf <> -1 Then
MsgBox (”印刷に失敗しました。ファイルが開かれていない可能性があります”)
Exit Sub
End If
buf = AcroExchAvDoc.Close(False)
Next
buf = AcroExchApp.Exit
Set AcroExchApp = Nothing
Set AcroExchPDDoc = Nothing
Set AcroExchAvDoc = Nothing
End Sub
—————————————————-
以上です。
長くなってしまってすみません・・・。
一応動作環境は
WindowsXP ServicePack3
Excel2003
Adobe Acrobat7.0 Professional
です。
※Adobe Acrobat7.0 Professionalがない環境では
うまく動作しない可能性があります。
あらかじめご了承下さい。
※また、この記事からコピーをしてVBEのコードとして貼り付けを行うと
コメントにしている部分(緑色の文字色になっているところ)が
うまく貼り付けできない現象が確認されています。
お手数ですが、お試しになる際には、コピーペーストをした後に
ご自身でコメントアウト処理をお願いいたします。
今回はこんなこともExcelVBAではできるんだ!
ということがお分かりいただければ幸いです★
それでは、また♪
パソコンスクールISA船橋校 並木
Tweet Check
最近のコメント