電子書籍の厳選無料作品が豊富!

マクロで印刷の途中でプリンタのメッセージが出ると止まってしまいます
Excel2007でベースのデータシートからフィルタで条件に合うデータを取り出し
同じファイルの印刷用としている別シートに貼り付けて罫線ページ計など体裁を整えて印刷
の処理をループで繰り返しています

通常は目的の処理が出来ていますが
印刷しているプリンタのインクが無くなった時などプリンタのメッセージが出ると
メッセージを閉じても続きのマクロが実行されず止まってしまいます
止まってしまうとファイルを閉じる事もできなくなり
止む無く強制終了すると閉じた後VisualBasicの ここで終了することはできません
というメッセージが出て閉じます

再度そのファイルを開くと前回の処理が終わったところで開きます
プリンタからのメッセージが出るときだけに起きる現象なのですが
対処する方法がわかりません

よろしくお願いします

A 回答 (3件)

#2の回答者です。



>またなにかありましたらよろしくお願いします
このまま締めないままで、質問をオープンのままというのは、現在の情報では満足されないということでしょうか。それは手厳しいです。

本来、#1さんの回答の中で指摘しているスプールで、マクロ側のエラーは回避されるはずです。
ただ、プリンタの種類など分かりませんから、以下で調べてみてください。スプールがない状態なら、空白が出てくると思います。

Private Sub ActivePrinterConfiguration()
 Dim oPn As Variant
 Dim strComputer As String
 Dim objWMIService As Object
 Dim colInPrn As Object
 Dim pn As Variant
 Dim aPn As String
 
 strComputer = "."
 Set objWMIService = GetObject("winmgmts:" _
 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
 Set colInPrn = objWMIService.ExecQuery _
 ("Select * from Win32_PrinterDriver")
 For Each oPn In colInPrn
 aPn = ActivePrinter
 aPn = Left(aPn, InStr(1, aPn, Space(1), 1) - 1)
 pn = Mid(oPn.Name, 1, InStr(oPn.Name, ",") - 1)
 If pn Like aPn & "*" Then
 msg = msg & vbCrLf & "Data File: " & oPn.DataFile
 msg = msg & vbCrLf & "Monitor Name: " & oPn.MonitorName
 msg = msg & vbCrLf & "Name: " & oPn.Name
 msg = msg & vbCrLf
 End If
 Next
 MsgBox msg
End Sub

プリンタの種類にもよりますが、最近のインクジェットでしたら、通常は、プリンタスプールがあるはずです。それが装備されていれば、よほど大きなデータ量でもなければ、そこにストックしますから、マクロ側ではエラーは発生しません。

概ねは、再開した後では、一部分が失敗していますが、印刷は続行できるかと思います。

プリンタ自体のエラーは、On Error Goto ErrHandler で、トラップしてもよいとは思いますが、そういう種類のエラーだとは思いません。

以下は、プリンタの種類にもよりますから、万能ではありませんが、以下のような方法もあります。
http://oshiete.goo.ne.jp/qa/120709.html
お勧めしませんが。

>逆にすべてのフィルタ条件を一度で戻せるマクロを作っておく方がストレス無く解決する
それは、簡単だと思います。

Sub Test1()
'オートフィルタ条件解除
If ActiveSheet.FilterMode Then
 ActiveSheet.ShowAllData
End If
'オートフィルタ解除
If ActiveSheet.AutoFilterMode Then
 ActiveSheet.AutoFilter.Range.AutoFilter
End If
End Sub
    • good
    • 0
この回答へのお礼

何度も回答をありがとうございます
時間がとれなくてチェックが遅くなり申し訳ありません

実は今回質問の印刷は月に数回特定の日に実行されるので
まだプリンタ設定の変更も 電源offも試せていません
結果が出てから 報告も兼ねて解決済みにと考えていたため
まだ締めておりませんでした

とりあえずのフィルタ条件解除のマクロは自身でも作ってみましたが
なにぶん記録したマクロをベースにして編集でしか作れない程度の
未熟者なもので1コ1コ戻していました(-_-;)
たった2行で戻せるのですね!勉強になりました


通常は起こらない例との事ですし
検索しても似たような事例が見つけられなかったので
使用マシン独自のトラブルかとも思ったりしますし
教えて頂いた事試してみて様子を見て
まだ問題があるようでしたら改めて質問させていただく事として
今回はひとまず解決済みとさせていただきます

ありがとうございました

お礼日時:2010/04/26 23:31

>プリンタのメッセージが出るとメッセージを閉じても続きのマクロが実行されず止まってしまいます


>対処する方法がわかりません

あまり、そういう例は起こらないはずですが、マクロが止まった場合は、プリンターの電源を切ればよかったはずです。マクロで、割込を入れるという方法がないとは言えませんが、常に、プリンタとの通信をインターラクティブですると、とても、マクロが遅くなると思います。

他に、常に、ループで一枚ずつPrintOut して、途中で割込が入れられるように、DoEvents を入れる方法というのもありますが、通常は、そのようなことはしませんね。
    • good
    • 0
この回答へのお礼

回答ありがとうございます

プリンタの電源を切るのは思いつかなかったので今度試してみます

今回質問のファイルの印刷マクロは
一度の実行で条件を変えて何度も印刷用データを取り出しますが
中には印刷不要の内容の時もあるので
都度プレビュー画面を表示し 印刷するなら印刷ボタン
不要なら閉じるボタンでビューを閉じると
続いてループ処理が実行されるようにしています
ユーザーが目で見て判断できるので使いやすく
何度もやり直しもできてなかなかうまく作れたと思っていますが
インクジェットプリンタの為か
インクが無くなった、用紙が無くなった だけでなく
インクが少なくなっただけでもいちいちメッセージが出てきて
止まってしまうと無理矢理終了したあとのファイルは
データのシートがいくつもフィルタ掛かったままになっているので
それを戻してシート保護をかけて・・・となかなか面倒なので・・・

逆にすべてのフィルタ条件を一度で戻せるマクロを
作っておく方がストレス無く解決するかもと思うようになりました

またなにかありましたらよろしくお願いします
ありがとうございました

お礼日時:2010/04/23 23:21

もしかするとインクを取り替えてプリンタがノーマルな稼働状態に復帰すれば,プリンタから応答が返ってようやく動き出すかもしれませんね。

ExcelVBA内での出来事では無いので,プログラム側で簡易な対処が可能なトラブルでは無いと思います。
印刷関連は,他にも「印刷プレビュー画面でトラブると一切制御を受け付けなくなる」など,マクロにとっては鬼門です。


もしかすると。
Excelを終了した状態で,ウィンドウズのスタートメニューのプリンタとファックスから当該のプリンタを右クリックしてプロパティを出します。詳細設定のタブでプリンタスプールもしくはプリンタに直接印刷データを送るなどの設定を,今の設定から違うのに変えてみると,ご相談のトラブル時にもロックアウトされてしまうのを逃れられるかも?しれません。

ただし通常の印刷にも直接影響する設定なので,今回ご相談のトラブルの発生頻度(結局その一回を諦めれば,終わりといえば終わりのトラブル)と,毎日の運用にどの程度の影響が現れるか天秤にかけて対応を検討してみてください。
    • good
    • 0
この回答へのお礼

回答ありがとうございます
以前にもネットワークプリンタの切り替えがマクロでは出来ず困った経験もあり
印刷関連は苦労していますがやっぱり仕方ありませんか・・・
(ちなみにプリンタの切替えは
 ”××のプリンタを選択してください”とのメッセージを出してから
 プリンタ選択のダイアログを出してユーザーに選択させる事で対処しました)

プリンタの設定を変える事が他の作業にどの程度影響するのかわかりませんが
ダメもとで一度試してみようと思います

ありがとうございました

お礼日時:2010/04/23 22:18

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