人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

合計で500ポイント差し上げます。プログラムについて質問いたします。お力を貸してください。

今、あるフォルダにpdfのファイルがたくさんはいっています。

ここから、あるエクセルのA列に沿って指定されたpdfを次々と印刷していくプログラムを作りたいです。

ツールはAcrobat,ghost script,Presto!ManagerなどがありプリンタはBrotherのMyMioという複合機です。


今はblue windというコマンドラインでpというコマンドを印刷に割り当てて印刷していますが(p file.pdfで印刷できる)連続して印刷できないので、とても不便です。さらになぜか、立ち上がったAcrobatをいちいち終了してから次の印刷を行わないと、Acrobatが「その名前のファイルは見つかりません」との旨のエラーを出します。ここは、blue wind特有のエラーかもしれませんのでよくわからなかったら気にしなくていいかもしれません。


とにかく、A列に書いてある a.pdf b.pdf c.pdf・・・の印刷が連続的に実行できれば文句がないです。


gs、Acrobatなどのパスは必要ならば、設定しなおすので適当な一般的な値を設定しておいてください。

その他質問も答えたいと思います。

よろしくお願いします。

●質問者: ReoReo7
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:Acrobat Blue brother GHOST GS
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● Mook
●700ポイント

エクセルからPDFファイルを印刷するがとても参考になるかと思います。

VBA で実行するサンプル(上記のページの例を一部変更したもの)です。

赤い部分をご自身の環境に合わせて変更するれば、動くかと思います。

' --- PDF ファイルのおかれているパス
Const PDFFilePath = "C:\PDFFiles\"
' --- プリンタ設定
Const PrinterName As String = """Microsoft Office Document Image Writer"""
Const DriverName As String = """Microsoft Office Document Image Writer"""
Const PortName As String = """Microsoft Office Document Image Writer port:"""

'---------------------------------------------------------------------
Sub PrintingPDF()
'---------------------------------------------------------------------
 Dim myShell As Object
 Set myShell = CreateObject("WScript.Shell")
 
 Dim lastLine As Long
 lastLine = Range("A65535").End(xlUp).Row
 
 Dim FileName As String
 Dim i As Long
' --- A列を順番に印刷
 For i = 1 To lastLine
 FileName = PDFFilePath & Cells(i, "A").Value
 myShell.Run ("AcroRd32.exe /t " & FileName & " " & PrinterName & " " & DriverName & " " & PortName)
 Next
' --- 終了時のメッセージ
 MsgBox "Data has been sent. " & vbLf & _
 "Please close the instanse of Acrobat Reader after printed."
End Sub
◎質問者からの返答

いつもながらさすがです。

早速試してみます。


?追記?

試してみました。

しかしうまくいかないです。

プログラムはバグはないようです。プログラムを改良してA1?A10まで実行できるようにしましたが、出力完了の(Data has been sent.)メッセージは出るものの、そのうちの一部しか実行できないようです。(一部または大部分印刷されない箇所がランダムにできてしまう。)

100%印刷を実行するプログラムにしたいです。

それから、プログラムの仕様を2点変更したいです。

(1)開始は、アクティブセルからとし、どんどん下を参照していって、空白の行でプログラムを停止するようにしたいです。どうしたらいいでしょうか。

(2)参照セル名が"a.pdf"ではなく" a.pdf "でも実行できるようにする(スペースを無視する)

今コメント欄に書いて下さった方がいるので、そちらを試してみます。できることならばマクロがいいですが・・・^-^A;


2 ● openseed
●400ポイント ベストアンサー

似た質問が過去にあるようです。

http://q.hatena.ne.jp/1147713104

以下のURLが参考にVBScriptまたは、VBA でスクリプトを書くのが容易だとおもいます。

http://puremis.net/excel/code/083ja.shtml

http://blog.so-net.ne.jp/nakagami/2006-07-06


ん? この質問はコードが必要ということですか?

◎質問者からの返答

ありがとうございます。できれば欲しいですね^?^;


3 ● b-wind
●22ポイント

コマンドラインで印刷できる状態にあるなら、シェルスクリプトかそれに類するものを使用するのがいいんじゃないでしょうか。


自分は VBScript 等は解らないので、Cygwin を入れて bash 使うのがありなら、スクリプトは提示できるのですが。

http://journal.mycom.co.jp/special/2002/cygwin/

◎質問者からの返答

シェルスクリプトですね。


4 ● Mook
●1ポイント

あまり変わらないかもしれませんが、追加仕様と若干の修正です。

'---------------------------------------------------------------------
Sub PrintingPDF()
'---------------------------------------------------------------------
 Dim myShell As Object
 Set myShell = CreateObject("WScript.Shell")
 
' --- 指定セルの確認
 If ActiveCell.Column <> 1 Or ActiveCell.Columns.Count > 1 Then
 MsgBox "A列の単一セルが選択されていません"
 Exit Sub
 End If
 
' --- 開始行を設定
 Dim printLine As Long
 printLine = ActiveCell.Row
 
 Dim FileName As String
' --- A列のアクティブセルから空白セルが出るまで順番に印刷
 Do While Len(Cells(printLine, "A").Value) > 0
' --- セル内の前後のスペースを削除
 FileName = PDFFilePath & Trim(Cells(printLine, "A").Value)
' --- ファイルの有無を判定
 If Dir(FileName, vbNormal) = "" Then
 MsgBox "[" & FileName & "]が存在しません"
 Else
' --- ファイルパスにダブルコーテーションを付加
 FileName = """" & FileName & """"
' --- デフォルトプリンタを使用
 myShell.Run "AcroRd32.exe /t " & FileName, 0, True
' ** --- プリンタを指定 ---
' ** myShell.Run "AcroRd32.exe /t " & FileName & " " & PrinterName & " " & DriverName & " " & PortName, 0, True
 End If
 printLine = printLine + 1
 Loop
' --- 終了時のメッセージ
 MsgBox "データを送信しました。" & vbLf & "プリント終了後 Acrobat Reader を閉じてください"
End Sub
◎質問者からの返答

すばらしい!使用は私の望みどおりになりました。

が、しかし・・!

やはり1つ飛ばしとかでしかファイルが印刷されませんね。なぜでしょう。コメント欄にコードを示します。パスもつけました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ