处理窗体和报表打印机设置

FormReport 对象关联的 Printer 对象与 Application 对象的 Printer 对象支持相同的属性和编程技术。

想要为特定窗体或报表设置或检索打印机设置时,请使用 FormReport 对象的 Printer 对象。 您可以暂时更改窗体和报表的打印机设置,也可以随窗体或报表保存这些设置。

使用窗体或报表保存打印机设置

窗体或报表是否使用默认应用程序打印机的设置(由 Application 对象的 Printer 对象管理),取决于窗体或报表以前是否保存了打印机设置。 可以通过两种方法保存窗体或报表的打印机设置:

  • 用户可以通过在任何视图中打开窗体或报表,然后使用“打印”“页面设置”对话框更改窗体或报表的设置,来保存打印机设置。

  • 可以在代码中对窗体或报表的 Printer 对象进行更改,如果在关闭窗体或报表之前使用 Save 方法,或者在使用 Close 方法关闭窗体或报表时为 Save 参数指定 acSaveYes,则这些更改将与窗体或报表一起保存。

注意

随窗体或报表保存打印机设置时,Access 将为窗体或报表创建一个新的数据结构,以包含所保存的设置。 最初,这一新的数据结构包含默认打印机的所有设置的副本。 用户或您的代码所替代的任何设置随该数据结构一起保存。

Access 并不在默认打印机设置与随窗体或报表保存的设置之间维护任何类型的继承性。 如果在保存窗体或报表的设置之后更改默认打印机设置,最初保存的设置将仍然有效。

确定窗体或报表是否保存了打印机设置

若要确定窗体或报表是否保存了打印机设置,可以使用以下语法读取 FormReport 对象的 UseDefaultPrinter 属性,其中 expression 是返回 FormReport 对象的任意表达式。

expression .UseDefaultPrinter 

UseDefaultPrinter 属性在设计视图中是可读/写的,但在其他所有视图中是只读的。

清除保存的打印机设置

您也可以通过将 UseDefaultPrinter 属性的值设置为 True,将该属性用作一种从窗体或报表中清除保存的设置的方法。 这相当于打开窗体或报表的“页面设置”对话框,然后在“页面”选项卡上选择“默认打印机”。仅当窗体或报表在设计视图中打开时,才能设置 UseDefaultPrinter 属性。

下面的代码片段打开当前项目中的每个报表,然后清除具有保存的设置的所有报表。

For Each obj In CurrentProject.AllReports 
    DoCmd.OpenReport ReportName:=obj.Name, View:=acViewDesign 
    If Not Reports(obj.Name).UseDefaultPrinter Then 
        Reports(obj.Name).UseDefaultPrinter = True 
        DoCmd.Save ObjectType:=acReport, ObjectName:=obj.Name 
    End If 
    DoCmd.Close 
Next obj 

保留窗体和报表打印机设置

如果您在窗体或报表处于设计视图以外的任意视图中时,以编程方式更改该对象的打印机属性设置,那么当您以交互方式关闭窗体或表单时,所做的更改会自动保存。

下面的过程说明如何保存和还原报表的打印机设置。

Sub RestoreReportPrinter() 
    Dim rpt As Report 
    Dim prtOld As Printer 
    Dim prtNew As Printer 
 
    ' Open the Invoice report in Print Preview. 
    DoCmd.OpenReport ReportName:="Invoice", View:=acViewPreview 
 
    ' Initialize rpt variable. 
    Set rpt = Reports!Invoice 
 
    ' Save the report's current printer settings 
    ' in the prtOld variable. 
    Set prtOld = rpt.Printer 
 
    ' Load the report's current printer settings 
    ' into the prtNew variable. 
    Set prtNew = rpt.Printer 
 
    ' Change the report's Orientation property. 
    prtNew.Orientation = acPRORLandscape 
 
    ' Change other Printer properties, and then print 
    ' or perform other operations here. 
 
    ' If you comment out the following line of code, 
    ' and a user interactively closes the report preview 
    ' any changes made to properties of the report's Printer 
    ' object are saved when the report is closed.  
    Set rpt.Printer = prtOld 
 
    ' Close report without saving. 
    DoCmd.Close ObjectType:=acReport, ObjectName:="Invoice", Save:=acSaveNo 
 
End Sub

支持和反馈

有关于 Office VBA 或本文档的疑问或反馈? 请参阅 Office VBA 支持和反馈,获取有关如何接收支持和提供反馈的指南。