お世話になります。

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

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

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

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

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

プリンタ xerox - DocuCentre607CP

A 回答 (4件)

多分スプーラーで


印刷量が多いと後回しにされます

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

この回答への補足

チェックされています。

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

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

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

補足日時:2004/11/16 16:19
    • good
    • 0

ShellExecute()ではだめですね。


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

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

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

この回答へのお礼

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

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

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

お礼日時:2004/11/10 10:07

それはヘンですね。


私はそのような現象に陥ったことはありません。

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

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

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

この回答への補足

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

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

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

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

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

DoEvents関数ではダメでした。

補足日時:2004/11/09 13:13
    • good
    • 0

こんにちは。



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

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

注目の記事

団塊世代の専業主婦が成り立った理由

すでに珍しくはなくなった夫婦の共働き。内閣府の男女共同参画白書(平成27年版)によると、2014年時点で共働き世帯が1077万世帯に対して専業主婦のいる世帯は720万世帯。だが、1980年の時点では、共働き614万世帯に...

おしトピ編集部からのゆる~い質問を出題中

お題をもっとみる

このQ&Aを見た人が検索しているワード


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

おすすめ情報

カテゴリ