- 締切済み
印刷要求順番と印刷出力順番が違う。
お世話になります。 現在、複数のファイルを指定し、一括で印刷をする処理をVBで作成しています。 ●問題 印刷される順番には意味があり、要求順に出力してほしいのですが、VB側でかけている印刷要求の順番と、プリンタのジョブにたまる順番が違う。 ループ内で1ファイル単位で印刷要求をかけているので、VB側は問題ないと思うのですが、原因がわかりません。 (ちなみにブレイクポイントをおき、1枚1枚印刷されるのを確認しながら行うと正常に印刷されます。) また、Sleep関数を使用し10秒待ちを入れても出力順が変わってきます。 問題解決のきっかけになれば幸いです。 宜しくお願い致します。 ---- 環境 ---- Windows2000 VB6.0 プリンタ xerox - DocuCentre607CP
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- deecyan
- ベストアンサー率38% (89/233)
多分スプーラーで 印刷量が多いと後回しにされます プリンターのプロパティの 詳細設定のタブで スプールされたドキュメントを最初に印刷するが チェックされていますか?
- taka_tetsu
- ベストアンサー率65% (1020/1553)
ShellExecute()ではだめですね。 印刷するものがどんなもんだかわかりませんが、出力させるアプリの作りによって順番が狂っても不思議ではありません。 なので、確実に印刷が終わってから次のファイルを印刷するようにする必要があります。 ShellExecuteEx()で印刷アプリを起動し、取得したプロセスハンドルを使用してWaitForSingleObject()で起動した印刷アプリが終了するまで次の印刷を行わないようにするのがいいかと。
お礼
ご意見ありがとうございます。 その方法も考えました。(まだ試してないですけど。) 今XEROXの方に何が問題なのか聞いている段階です。 今回の場合、印刷速度を重視しているので、XEROXの解答で対応出来ないようであればそちらを試したいと思います。
- mfuku
- ベストアンサー率50% (173/345)
それはヘンですね。 私はそのような現象に陥ったことはありません。 帳票ツールは何を使用しているのでしょうか? あるいは、VBのPrinterオブジェクトにより出力しているのでしょうか? また、後者の場合、EndDocメソッドの発行は適切な順番で行われてますか? それでもダメな場合は、出力した後にDoEvents関数を挿入してみてはいかがでしょうか? 「確認しながら行うと」というのが「メッセージボックスを出力しOKボタンを押すと」ということでしたら、Windowsに制御が渡ってないことが原因かもしれませんので試してみてください。
補足
'実行する操作を指定 srtOperation = "print" 'ファイル名を指定 strFileName = ファイルパス 'デフォルトディレクトリを指定 strDefaultDirectory = "" lngExecutableHInstance = _ ShellExecute(Me.hwnd, _ srtOperation, _ strFileName, _ vbNullString, _ strDefaultDirectory, _ SW_SHOWNORMAL) 上記の処理で印刷要求をかけています。 DoEvents関数ではダメでした。
- taka451213
- ベストアンサー率47% (436/922)
こんにちは。 プリンターをポーリングして、印刷終了後に次のJOBを出すのはダメですか? JOBをスプールする必要がなければ・・・ですが。 (^^ゞ
補足
チェックされています。 推測ですが、VBから印刷要求を出してからプリンタのジョブに並ぶ前に順番が入れ替わってしまっていると思います。 プリンタのジョブに並んでいる時点で順番がおかしいので。 やはり、印刷出力されたのを確認してから、次の印刷要求をかけなければならないのでしょうか?