我试图为表单上的打印机选择提供控件。
名为cbxPrinterList
的组合框列出了打印机名称。当用户点击CompanyHistory
按钮时,应从所选打印机打印Command1
报告。如何强制它以横向打印。
以下代码适用于一个例外。该报告以横向设计。但它是纵向打印。
Private Sub Command1_Click()
Dim reportName As String
reportName = "CompanyHistory"
Dim vPrinter As Access.Printer
Set vPrinter = Application.Printers(cbxPrinterList.ListIndex)
vPrinter.Orientation = acPRORLandscape
DoCmd.OpenReport reportName, View:=acViewPreview, WindowMode:=acHidden
Set Reports(reportName).Printer = vPrinter
DoCmd.OpenReport reportName, View:=acViewNormal
Set Application.Printer = Nothing
' Close report without saving.
DoCmd.Close ObjectType:=acReport, ObjectName:="Invoice", Save:=acSaveNo
End Sub
答案 0 :(得分:1)
您可能最好采用稍微不同的方法来更改目标打印机以解决此问题。而不是打开报表和更改报表打印机,尝试暂时更改Microsoft Access中的默认打印机,然后再将其更改回来。我过去从未遇到任何问题。
首先,我不知道您的组合框是如何设置的,但我希望它提供打印机名称列表,以便所选择的组合框将返回打印机的Windows DeviceName。下面是一些使用可用打印机列表填充组合框的示例代码。你可以把它放在Form_Open事件中。
Dim prt As Access.Printer
'Populate the Printer Combo Box
For Each prt In Application.Printers
Me.cbxPrinterList.AddItem prt.DeviceName
Next prt
Set prt = Nothing
您可能遇到的另一个问题是,可能会为特定打印机而不是默认打印机设置报告。在报表的设计视图中,检查页面设置以确保“Printer for CompanyHistory”设置为“默认打印机”(而不是“使用特定打印机”。)我发现为特定打印机保存报表时,在运行时更改为其他打印机时,可能会导致布局出现问题。
然后,按照以下方式修改代码,以便在打印前更改默认打印机。
Dim DefaultPrinter As String
Dim ReportPrinter As String
Dim prt As Access.Printer
Dim reportName As String
reportName = "CompanyHistory"
ReportPrinter = cbxPrinterList
'Get the current default printer so we can restore it after printing
DefaultPrinter = Application.Printer.DeviceName
'No need to change the printer if they chose the current default
If ReportPrinter <> DefaultPrinter Then
For Each prt In Application.Printers
If prt.DeviceName = ReportPrinter Then
Set Application.Printer = prt
Exit For
End If
Next prt
End If
DoCmd.OpenReport reportName, acViewNormal
If ReportPrinter <> DefaultPrinter Then
Set Application.Printer = Application.Printers(DefaultPrinter)
End If