How to automate the process of selecting the printer for a report in Microsoft Access (319317)



The information in this article applies to:

  • Microsoft Office Access 2003
  • Microsoft Access 2002
  • Microsoft Access 2000
  • Microsoft Access 97

This article was previously published under Q319317
Novice: Requires knowledge of the user interface on single-user computers.

This article applies only to a Microsoft Access database (.mdb).

SUMMARY

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.

MORE INFORMATION

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:
  1. Create the following three reports:

    • rptLaserPrinter
    • rptDotMatrix
    • rptMyReport


    NOTE: rptMyReport represents the actual report that you want to print.
  2. To set the printer options, follow these steps:
    1. Open rptLaserPrinter in Design view.
    2. On the File menu, click Print.
    3. In the Name box, click the laser printer that you want to use.
    4. Click Properties, set any print options that you want, such as the orientation and paper size, and then click OK.
    5. Repeat steps a through d for rptDotMatrix. Click the dot-matrix printer in step c.
  3. In the Database window, click Modules, click New, and then type the following function:

    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
    End Function
    						
    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:
    This 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>?
  4. Save the module as Module1, and then quit the Visual Basic Editor.
  5. Create the following form:
       Form: frmForm1
       ------------------------------
          RecordSource: Unbound
    
       Control Type: Command Button
          Name: cmdLaser
          Caption: Laser
       Control Type: Command Button
          Name: cmdDotMatrix
          Caption: Dot Matrix
    					
  6. On the View menu, click Code.
  7. In the Visual Basic Editor, type the following procedures:
    Private Sub cmdLaser_Click ()
    
      Call ChangePrinter("rptMyReport", "rptLaserPrinter")
      DoCmd.PrintOut
    
    End Sub
    
    Private Sub cmdDotMatrix_Click ()
    
      Call ChangePrinter("rptMyReport", "rptDotMatrix")
      DoCmd.PrintOut
    
    End Sub
    					
  8. Quit the Visual Basic Editor, and then change the On Click property of both command buttons to [Event Procedure]. To do so, follow these steps:
    1. In Design view, click the command button, and then click Properties on the View menu.
    2. Click the Event tab, click the On Click property, click the down arrow, and then click [Event Procedure].
  9. To print rptMyReport to a specific printer, open frmForm1 in Form view, and then click the appropriate button.

REFERENCES

For more information about the PrtDevNames property, click Microsoft Visual Basic Help on the Help menu, type prtdevnames in the Office Assistant or the Answer Wizard, and then click Search to view the topic.


For more information about how to control your printer from Microsoft Access, visit the following Microsoft Web site:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/off2000/html/acproPrtDevMode.asp

Modification Type:MinorLast Reviewed:10/13/2005
Keywords:kbProgramming kbDatabase kbprinters kbReport kbhowto KB319317 kbAudDeveloper