如何为整个作业选择打印机?

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的事情吗?

以上是关于如何为整个作业选择打印机?的主要内容,如果未能解决你的问题,请参考以下文章

如何为awk添加回声?

如何为标签打印 UPC-A 对象?

如何为附加到元素的每个事件侦听器打印或迭代? [复制]

如何为 PL/SQL 中的 dbms 输出打印的值提供别名?

结对作业第二次

结对作业2