- ベストアンサー
VBAのDoEventsが上手く動きません
お世話になります。 ExcelのVBAで印刷処理をしているのですが、印刷枚数が多いのでDoEventsイベントを入れ、印刷中断処理を行いたいのですが、上手くできません。 印刷中ダイアログが表示されるのが原因なのでしょうか?それともコードの書き方が悪いのでしょうか?よろしくお願いします。 コードは以下のとおりです。 ************************************************ Public Can_flg As Boolean ************************************************ Private Sub CommandButton1_Click() Can_flg = True End Sub ************************************************ Private Sub UserForm_Activate() Dim ms As String Dim j As integer Can_flg = False For j = 1 To 31 DoEvents If Can_flg = True Then ms = MsgBox("印刷を中止します。", vbOKCancel) If ms = vbOK Then Exit For Else Can_flg = False End If End If Me.Label1.Caption = "印刷中です… (" & j & "/" & i & "ページ)" Sheets("テスト").PrintOut Next j Unload Me End Sub
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 > Sheets("テスト").PrintOut プリンタードライバに命令を送った後では、もう中止命令は利きません。 印刷中は、また、CommandButton も生きていないように思います。 その割り込みのタイミングの取り方ではありませんか? 1枚目は仕方がありませんが、その後で割り込みが入れられるようなスタイルはどうでしょうか?Wait を入れた分だけ遅くはなりますが、割り込みは入れられるようになるかと思います。 本来は、Esc で、割り込みを入れる方法もあると思いますが、CommnadButtonを入れているので、あえて、こうしました。 Me.Label1.Caption = "印刷中です… (" & j & "/" & i & "ページ)" Sheets("テスト").PrintOut Application.Wait Now() + TimeValue("00:00:03") DoEvents
その他の回答 (1)
- Bickyon
- ベストアンサー率41% (42/101)
同じコードを貼り付けて試してみましたが、うまく動きましたよ。 ただ、すぐに終わってしまうのでFor文のToの値は32767に変更して実行しました。 Sheets("テスト").PrintOutをコメント化し、Can_flg = Trueの行にDebugポイントを設定して動作のトレースを行ってみてはどうですか?