質問

お世話になります。

現在、複数のファイルを指定し、一括で印刷をする処理をVBで作成しています。

●問題
印刷される順番には意味があり、要求順に出力してほしいのですが、VB側でかけている印刷要求の順番と、プリンタのジョブにたまる順番が違う。

ループ内で1ファイル単位で印刷要求をかけているので、VB側は問題ないと思うのですが、原因がわかりません。
(ちなみにブレイクポイントをおき、1枚1枚印刷されるのを確認しながら行うと正常に印刷されます。)
また、Sleep関数を使用し10秒待ちを入れても出力順が変わってきます。

問題解決のきっかけになれば幸いです。
宜しくお願い致します。

---- 環境 ----
Windows2000
VB6.0

プリンタ xerox - DocuCentre607CP

通報する

回答 (4件)

多分スプーラーで
印刷量が多いと後回しにされます

プリンターのプロパティの
詳細設定のタブで
スプールされたドキュメントを最初に印刷するが
チェックされていますか?

この回答への補足

チェックされています。

推測ですが、VBから印刷要求を出してからプリンタのジョブに並ぶ前に順番が入れ替わってしまっていると思います。

プリンタのジョブに並んでいる時点で順番がおかしいので。

やはり、印刷出力されたのを確認してから、次の印刷要求をかけなければならないのでしょうか?

ShellExecute()ではだめですね。
印刷するものがどんなもんだかわかりませんが、出力させるアプリの作りによって順番が狂っても不思議ではありません。

なので、確実に印刷が終わってから次のファイルを印刷するようにする必要があります。

ShellExecuteEx()で印刷アプリを起動し、取得したプロセスハンドルを使用してWaitForSingleObject()で起動した印刷アプリが終了するまで次の印刷を行わないようにするのがいいかと。

この回答へのお礼

ご意見ありがとうございます。

その方法も考えました。(まだ試してないですけど。)

今XEROXの方に何が問題なのか聞いている段階です。
今回の場合、印刷速度を重視しているので、XEROXの解答で対応出来ないようであればそちらを試したいと思います。

それはヘンですね。
私はそのような現象に陥ったことはありません。

帳票ツールは何を使用しているのでしょうか?
あるいは、VBのPrinterオブジェクトにより出力しているのでしょうか?

また、後者の場合、EndDocメソッドの発行は適切な順番で行われてますか?

それでもダメな場合は、出力した後にDoEvents関数を挿入してみてはいかがでしょうか?
「確認しながら行うと」というのが「メッセージボックスを出力しOKボタンを押すと」ということでしたら、Windowsに制御が渡ってないことが原因かもしれませんので試してみてください。

この回答への補足

'実行する操作を指定
srtOperation = "print"

'ファイル名を指定
strFileName = ファイルパス

'デフォルトディレクトリを指定
strDefaultDirectory = ""

lngExecutableHInstance = _
ShellExecute(Me.hwnd, _
srtOperation, _
strFileName, _
vbNullString, _
strDefaultDirectory, _
SW_SHOWNORMAL)

上記の処理で印刷要求をかけています。

DoEvents関数ではダメでした。

こんにちは。

プリンターをポーリングして、印刷終了後に次のJOBを出すのはダメですか?
JOBをスプールする必要がなければ・・・ですが。
(^^ゞ

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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

新しく質問する

注目の記事

おしトピアプリ登場記念!コメントで最大1万円分のギフト券があたる!

話題のトピックにさくっとコメントできる「おしトピ」にAndroid版アプリに続きiPhoneアプリも登場! どちらかのアプリをダウンロードして指定のオーダーにコメントした方に抽選で最大1万分のアマゾンギフト券をプレゼント! フジテレビ出身のフリーアナウンサー長谷川豊氏の質問にも回答受付中!


新しく質問する

このカテゴリの人気Q&Aランキング

毎日見よう!教えて!gooトゥディ