Sometimes I want to print data from a recordset to a report, reading and printing each record. However, it’shard to interrupt that process before it sends all recordsets to the printer queue. Use a Cancel buttonassociated to a flag. Besides the button that starts the printing, create another one named Cancel. You canalso set its Cancel property to True, so the user can stop printing by pressing the Esc key. Add a variable ina module:
Dim CancelNow As Integer
Put this code in the Click event of the Cancel button:
Sub cCancel_Click () CancelNow = -1 DoEventsEnd Sub
You might even do without the button and simply intercept the Escape key. In this case, set the form’sKeyPreview property to True and insert this code:
Sub Form_KeyPress (KeyAscii As Integer) 'if user presses ESC If KeyAscii = (27) Then CancelNow = -1 DoEvents End IfEnd sub
Finally, add a test for the flag inside the printing loop:
'... some code...'printing a database recordsetDo While Not MyRecordSet.EOF Printer.Print MyRecordSet!SomeRecord MyRecordSet.MoveNext DoEvents 'stop if Cancel button was clicked If CancelNow then Exit DoLoopPrinter.EndDoc'... more code...