開発環境
WinXP
VB6.0 SP6
Excel2000
質問は下記の通りです。
VBプログラムよりOLE オートメーションでエクセルを起動し、エクセルシートにデータを書き込んだ後、エクセルの印刷プレビューを表示する操作を行っています。
そこで、プレビュー画面より印刷をしてウィンドウが閉じられたのか、それとも印刷せずにウィンドウが閉じられたのかをVB側で知る方法はあるのでしょうか?
あるとすればどんな方法で実現可能なのでしょうか?
ご教授よろしくお願いします。
印刷はプリンタースプールホルダー
C:\WINDOWS\system32\spool\PRINTERS
に 00021.SPL みたいな、こんなファイルが出来ます
DIR 関数で DTが作成されたか判断をしたら、と思います。
まつ様、回答ありがとうございます。
スプールフォルダのファイルを監視するには呼び出し元では監視できない
ので(OLE処理のところで処理が止まってしまう)別アプリ(プロセス?)
にての監視になりそうですね。
また、VBから起動したエクセルから印刷したのかどうかの判定も難しそうです。
エクセル側で開くファイルは自作のエクセルテンプレートなのでマクロを
組み込んでなんとかならないかとも思案中です。
BeforePrintイベントはあるようですがAfterPrintイベントがないので
これもまた行き詰っています。
引き続き何か方法が御座いましたらよろしくお願いします。
帳票出力でよくやるのが
①帳票を出力するマクロを作成
②VBから上記マクロを起動
③マクロ起動の戻り値でプレビュー/印刷押下かを判断
# 意図と異なっていたらすみません
seven様、回答ありがとうございます。
よければ、この部分をもう少し解説お願いできないでしょうか?
>マクロ起動の戻り値でプレビュー/印刷押下かを判断
エクセルのプレビュー画面から『印刷』ボタンをクリックすると次に
印刷ダイアログが表示されますが、マクロ内でこの印刷ダイアログの
印刷ボタンが押されたのを取得できるのでしょうか?
よろしくお願いします。
エクセル側から印刷されたことをVBへ伝えられればいいのですが
とりあえず、運用で今作っているアプリを使用している時は他のアプリ
では印刷しないことという条件付で下記要領で実現しました。
1.VBよりOLEオートメーションでエクセル起動
2.シートにデータを書き込む
3.プリンタの状態を一時停止にする
4.エクセルの印刷プレビュー画面表示
5.印刷して、またはしないでPrintPreviewからVBに処理が戻ってくる
6.印刷ジョブを検索して印刷したドキュメント名があったなら『印刷した』と判断
7.プリンタの状態を再開する
とりあえずは、この様な処理に作りました。
一応解決としますが、確実な方法があればよろしくお願いします。