印刷開始時に表示して印刷終了後に消す印刷中止可能なメッセージボックスを作成する.
'以下のコードを標準モジュールに置く
'
Declare Function AlwaysOnTop Lib "user32" Alias "SetWindowPos" _
(ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _
ByVal x As Long, ByVal y As Long, ByVal cx As Long, _
ByVal cy As Long, ByVal wFlags As Long) As Long
'印刷のキャンセル用フラグ
Public CancelFlag As Boolean
'以下が印刷用のコード
'
'Form1 にコマンドボタンを配置して .Name プロパティを "cmdStartPrint" にする
'
Private Sub cmdStartPrint_Click()
CancelFlag = False
frmPrintCancel.Show vbModeless
Do
'Form2.cmdCancelPrint_Click イベントを取得するため
'DoEvents を発行
DoEvents
'CancelFlag が True であれば出力をキャンセル
If CancelFlag Then
'スプールされているデータをキャンセル
Printer.KillDoc
Exit Do
End If
'
'ここらに出力用のコードを記載
'
'出力データがすべて出力されたら
If 出力が完了 Then Exit Do
Loop
Unload frmPrintCancel
Set frmPrintCancel = Nothing
MsgBox IIf(CancelFlag, "印刷はキャンセルされました", "印刷が完了しました")
End Sub
'以下が印刷キャンセル用のコード
'
'Form2 にコマンドボタンを配置して .Name プロパティを "cmdCancelPrint" にする
'
Private Sub Form2_Load()
Const SWP_NOMOVE = &H2 'これらのパラメータの意味はAPIリファレンスを
Const SWP_NOSIZE = &H1 '参照
Const HWND_ALWAYSTOP = -1
Dim intResults As Integer
'キャンセル用フォームを常に手前に表示
intResults = AlwaysOnTop(Me.hwnd, HWND_ALWAYSTOP ,_
0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)
End Sub
Private Sub cmdCancelPrint_Click()
'キャンセルフラグを操作
CancelFlag = (MsgBox("印刷をキャンセルしますか?", _
vbYesNo + vbSystemModal, vbDefaultButton2) = vbYes)
End Sub
参照
印刷の中断