• ベストアンサー

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

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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)
回答No.1

同じコードを貼り付けて試してみましたが、うまく動きましたよ。 ただ、すぐに終わってしまうのでFor文のToの値は32767に変更して実行しました。 Sheets("テスト").PrintOutをコメント化し、Can_flg = Trueの行にDebugポイントを設定して動作のトレースを行ってみてはどうですか?

関連するQ&A