- 締切済み
EXECL VBAにて自動印刷100枚でフリーズ
フィリーズの原因 とりあえず、アクティブプリンターのみで印刷を連続すると異常なし 交互に印刷すると今度はリソース不足が出ました。 最後に、EPSON LPプリンターのみに連続印刷でやはりリソース不足が出ました。 どうもアクティブプリンターからの切替でリソースを必要としているみたいですが 対策はをご教示下さい。 ======================================== Sub チェンジプリンター() '印刷切り替え Dim myPrinter As String myPrinter = Application.ActivePrinter '現在のプリンターを記憶 If Worksheets("DeviceRead-Write").Cells(6, 13).Value = 2 Then 'I6が2ならEPSON_2プリンターに印刷する Application.ActivePrinter = "EPSON_2 on Ne00:" 'プリンターを切り替える ActiveSheet.PrintOut 'シートFormの印刷 Application.ActivePrinter = myPrinter 'プリンターを元に戻す End If If Worksheets("DeviceRead-Write").Cells(6, 13).Value = 1 Then 'I6が1ならEPSON LPプリンターに印刷する ActiveSheet.PrintOut 'シートFormの印刷 End If End Sub ==========================================
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- NotFound404
- ベストアンサー率70% (288/408)
ネットワーク(プリンタ)の設定か何かのためのような気も? ローカルPCでも実プリンタで試すわけにはゆかないので MS社のXPSプリンタとPDFCreatorで試しました。 提示されたコードを試してもリソース不足のエラーは発生しません。 (Cells(6,13)は"M6"の間違いとしても) 当方はWindows7 & Office2010 です。 サンプルに使ったデータは日本郵便の郵便番号.csv を xlsm に変換したもので 印刷プレビューでは408ページになります。 関数・セルの結合など一切行っていません。 で、下記でも行いましたが何事もなく進行しました。 Sub test() Dim myPrinter As String Const XPS As String = "Microsoft XPS Document Writer on Ne01:" Const PDF As String = "PDFCreator on Ne00:" Dim i As Integer For i = 1 To 4 If i Mod 2 = 1 Then Sheets("DeviceRead-Write").PrintOut Copies:=1 _ , ActivePrinter:=XPS _ , PrintToFile:=True _ , PrToFileName:="E:\pdf\" & i & ".xps" Else Sheets("DeviceRead-Write").PrintOut Copies:=1 _ , ActivePrinter:=PDF 'PDFCreatorは自動的に連番名ファイルを作ってくれるように設定してあるので。 End If Next End Sub
- NotFound404
- ベストアンサー率70% (288/408)
>最後に、EPSON LPプリンターのみに連続印刷でやはりリソース不足が出ました。 >プリンターを切替条件で(B)に変更すると113枚程度でリソース不足で完了出来ませんとなりす。 >始めからプリンター(B)に出力条件を出しても同様113枚程度でリソース不足で止まります。 ということから EPSON LPプリンターを通常使うプリンターに設定し、 Excelのデータはリソース不足の時のモノを流用。 でもリソース不足のエラーになりますかね。 ミスリードが怖いので、これっきりにしたいと思いますが、 切り替えで問題が発生しているのではなく EPSON LPプリンターに問題があるのでは? 他にプリンタがあればEPSON LPプリンターではなく そちらとの組み合わせで試してみる。 (MS社のXPSやPDFプリンタで代用できるかも) EPSON LPプリンタの設定変更と確認。 EPSONのサイトにいってドライバーの更新確認。 イベントビューアに何かログが残っていないか確認。 などを私なら調べてみます。 以上ご参考までに。
- l3651s31io4
- ベストアンサー率0% (0/3)
Sleepとか入れて一定期間処理を停止させてはどうですか? 他のかたも言っていますが、よみきっていないのでしょう。
- NotFound404
- ベストアンサー率70% (288/408)
相当な『山勘』ですが プリンターにデータを送り切っていない OR プリンターの印刷が終了していない のにプリンターの切り替えを行ってフリーズ・・・かも? 前者の場合にVBAでデータ送信完了まで調整してくれるのか? ・・・など。 プリンターの状況を観察しつつVBAでステップ実行などで確認すれば 解決の糸口が見えて来るかもです。 経験があるわけでも実証した訳でもありません。ご参考まで。
お礼
ご意見ありがとうございました いろいろ実験をした結果、 プリンター切替にはリソースを費やすようです。 定期的にExelを保存しないで再起動することで 継続的に出力できます。 定期的にExelを保存しないで再起動する方法を探します。
補足
ご回答ありがとうございます。 現象は通常使うプリンター(A)に出力する場合、問題ありません。 スプール状態(印刷待ち)の状態で2000枚まで確認しました。 プリンターを切替条件で(B)に変更すると113枚程度でリソース不足で完了出来ませんとなります。 始めからプリンター(B)に出力条件を出しても同様113枚程度でリソース不足で止まります。 (A),(B)切替(交互)の場合合計113枚でリソース不足となります。 また、2個目のIf文をElseIfに替えても変化有りません。 殆どが、(B)出力条件が絡み、113枚前後でリソース不足になる理由が分かりません。 チェンジプリンターの文献が少なく苦慮しています。 宜しくお願い致します。
お礼
いろいろ実験をした結果、 プリンター切替にはリソースを費やすようです。 定期的にExelを保存しないで再起動することで 継続的に出力できます。 定期的にExelを保存しないで再起動する方法を探します。
補足
ご教示ありがとうございます。 他のプリンタードライバー(NEC製・キヤノン製)等でも試して見ましたが、ネットワークプリンターの切替でやはりリソース不足が発生します。 イベントビューワーにはエラーはありませんが、いろいろな情報は出ています。 解析中です。 やはり、プリンターの切替でメモリーリークが起きている可能性が大かもしれません。 メモリーリークを防ぐ方法があればいいのですが・・・