こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

投稿日時 - 2007-04-30 03:39:20

QNo.2961367

すぐに回答ほしいです

質問者が選んだベストアンサー

こんにちは。

>   Sheets("テスト").PrintOut

プリンタードライバに命令を送った後では、もう中止命令は利きません。
印刷中は、また、CommandButton も生きていないように思います。
その割り込みのタイミングの取り方ではありませんか?

1枚目は仕方がありませんが、その後で割り込みが入れられるようなスタイルはどうでしょうか?Wait を入れた分だけ遅くはなりますが、割り込みは入れられるようになるかと思います。
本来は、Esc で、割り込みを入れる方法もあると思いますが、CommnadButtonを入れているので、あえて、こうしました。

Me.Label1.Caption = "印刷中です… (" & j & "/" & i & "ページ)"
   Sheets("テスト").PrintOut
   Application.Wait Now() + TimeValue("00:00:03")
   DoEvents

投稿日時 - 2007-04-30 09:33:59

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

同じコードを貼り付けて試してみましたが、うまく動きましたよ。

ただ、すぐに終わってしまうのでFor文のToの値は32767に変更して実行しました。

Sheets("テスト").PrintOutをコメント化し、Can_flg = Trueの行にDebugポイントを設定して動作のトレースを行ってみてはどうですか?

投稿日時 - 2007-04-30 08:38:01

あなたにオススメの質問