如何为整个作业选择打印机?
Posted
技术标签:
【中文标题】如何为整个作业选择打印机?【英文标题】:How to select a printer for entire job? 【发布时间】:2016-07-11 15:42:12 【问题描述】:我目前有一个 Access 2003 数据库,它有一个表格,可以根据用户选择的作业打印一系列报告。该查询也在 VBA 代码中,它查看作业的编目部件并打开其相应的报告。
正确的代码如下:
Private Sub Print_Report_Click()
Dim default_cat As Dao.Database
Dim d As Dao.Recordset
Dim q As String
Set default_cat = CurrentDb
q = "SELECT DISTINCT CATALOG, USER3 FROM [_MASTER_UPLOAD] WHERE SerialNumber='" & Me.[SerialNumberSelection] & "'"
Set d = default_cat.OpenRecordset(q, dbOpenDynaset)
d.MoveFirst
DoCmd.RunCommand acCmdPrint
Do While Not d.EOF
Select Case d!USER3
Case "COM"
DoCmd.OpenReport "RPTCompressor", , , "CATALOG = '" & d!CATALOG & "'"
Case "CON"
DoCmd.OpenReport "RPTCondenser", , , "CATALOG = '" & d!CATALOG & "'"
Case "CRV"
DoCmd.OpenReport "RPTCapacityRegValve", , , "CATALOG = '" & d!CATALOG & "'"
Case "CV"
DoCmd.OpenReport "RPTCheckValve", , , "CATALOG = '" & d!CATALOG & "'"
Case "etc..."
End Select
d.MoveNext
Loop
d.Close
End Sub
基本上现在我的问题在于打印机选择DoCmd.RunCommand acCmdPrint
。弹出窗口出现,我可以选择我想要的任何打印机,但是该选择似乎只影响该组的第一个报告(所有其他人都转到计算机的默认打印机)。最有可能的是,我会从我们的打印室打印机打印报告,或者只是将它们转换为 PDF,但这也意味着我无法将其硬编码为始终打印到特定位置。
如何使我的打印机选择对所有报告都保持有效,最好不必为同一组中的每个报告运行 acCmdPrint 命令?
提前致谢。
编辑
此问题在此处指定并继续:How to pass reference to combobox?
【问题讨论】:
【参考方案1】:从谷歌搜索的第一个结果access vba select printer(只是说):
如果您的报告设置为在默认打印机上打印,最简单的方法是临时更改默认打印机:
Set Application.Printer = Application.Printers("myPrinterDeviceName")
DoCmd.OpenReport "FirstReport"
DoCmd.OpenReport "SecondReport"
' ...
Set Application.Printer = Nothing
如果没有,您可以按报告执行:
DoCmd.OpenReport "FirstReport", View:=acPreview, WindowMode:=acHidden
Set Reports("FirstReport").Printer = Application.Printers("myPrinterDeviceName")
DoCmd.OpenReport "FirstReport", View:=acViewNormal
链接页面还有一个示例,说明如何显示可用打印机列表以供选择。
Private Sub GetPrinterList(ctl As Control)
Dim prt As Printer
For Each prt In Printers
ctl.AddItem prt.DeviceName
Next prt
ctl = Application.Printer.DeviceName
End Sub
【讨论】:
我对您列出的前两个选项的问题是您对打印机名称进行了硬编码。我不会总是能够打印到同一台打印机上,报告的数量也会因工作而异。就像我说的,使用DoCmd.RunCommand acCmdPrint
可以得到我的打印机列表并允许我选择一个,但该打印机仅对第一个报告有效。下一个报告将发送到默认打印机。
这只是一个简单的例子。代替DoCmd.RunCommand acCmdPrint
,将“选择打印机”下拉框添加到您的表单中,如 MSDN 页面上所示。这是您使用的打印机设备名称。你必须根据你的需要调整这些方法,我不打算为你的具体情况编写完成的代码。
所以为了回答我的问题,我不能暂时将我的默认打印机设置为我使用DoCmd.RunCommand acCmdPrint
选择的打印机?
我认为没有。要(临时)更改默认打印机,您需要Set Application.Printer = ...
我在想那个...我可以做类似Set Application.Printer = acCmdPrint.Value
的事情吗?以上是关于如何为整个作业选择打印机?的主要内容,如果未能解决你的问题,请参考以下文章