If you want to print a report to a particular printer, you
can manually select the printer and all of the print options, or you can
automate the process so that with a click of a button, you can switch printers
and then print your report with the options that you predefine. This article
explains how to automate the process of printer selection.
This procedure uses two examples: printing to a laser
printer and printing to a dot-matrix printer. You can substitute the particular
printers that you want to use. To automate the process of printer selection for
a particular report, follow these steps:
Create the following three reports:
NOTE: rptMyReport represents the actual report that you want to
To set the printer options, follow these steps:
Open rptLaserPrinter in Design view.
On the File menu, click Print.
Note In Access 2007, click the Microsoft Office Button, and then click Print.
In the Print dialog box, click the laser printer that you want to use in the Name box, and then click OK.
Click Properties, set any print options that you want, such as the orientation and
paper size, and then click OK.
Repeat steps a through d for rptDotMatrix. Click the
dot-matrix printer in step c.
In the Database window, click Modules, click New, and then type the following function:
Note In Access 2007, click Module in the Other group on the Create tab.
Function ChangePrinter(rptToChange As String, rptPrinter As String)
Dim rpt1 As Report, rpt2 As Report
DoCmd.OpenReport rptToChange, acViewDesign
DoCmd.OpenReport rptPrinter, acViewDesign
Set rpt1 = Reports(rptToChange)
Set rpt2 = Reports(rptPrinter)
rpt1.PrtDevNames = rpt2.PrtDevNames
DoCmd.Close acReport, rptPrinter, acSaveNo
DoCmd.OpenReport rptToChange, acViewPreview
NOTE: The ChangePrinter function copies the PrtDevNames property from one report to another. You can then copy the print
options that you set for the rptLaserPrinter and rptDotMatrix reports to a
specific report that you want to print.
NOTE: The "acSaveNo" property
is used in the "DoCmd.Close acReport, rptPrinter, acSaveNo" line of the code that is shown earlier in this section. If
you do not use this option and you save the PrtDevName of a nondefault printer to
the report design, the report will not be able to find the printer when it runs
the next time. You will receive the following error message:
document was previously formatted for the printer <PrinterName> on
<Port>; but that printer isn't available. Do you want to use the default
printer <DefaultPrinterName> on <Port>?
Save the module as Module1, and then exit the Visual Basic
Note In Access 2007, click View Code in the Tools group on the Design tab.
In the Visual Basic Editor, type the following procedures:
Private Sub cmdLaser_Click ()
Call ChangePrinter("rptMyReport", "rptLaserPrinter")
Private Sub cmdDotMatrix_Click ()
Call ChangePrinter("rptMyReport", "rptDotMatrix")
Exit the Visual Basic Editor, and then change the On Click property of both command buttons to [Event Procedure]. To do so, follow these steps:
In Design view, click the command button, and then
click Properties on the View menu.
Note In Access 2007, click the command button in the design view, and then click Property Sheet in the Tools group on the Design tab.
Click the Event tab, click the On Click property, click the down arrow, and then click [Event Procedure].
To print rptMyReport to a specific printer, open frmForm1
in Form view, and then click the appropriate button.