Vba MS Access中的打印对话框

Vba MS Access中的打印对话框,vba,ms-access,dialog,Vba,Ms Access,Dialog,我想打开一个打印对话框。我已经有十年没有用VB编程了,我有点生疏了 我得到了一个MS Access VB脚本的副本,该脚本选择一个MDB文件,然后只打印一个副本。我的思考过程是: 打开一个对话框 选择打印机 输入份数 印刷品 目前,我要修改的原始脚本部分是: [SQL query above this] .... ' Open form Dim rs As DAO.Recordset Set rs = db.OpenRecordset("select@@identity") Debug.Pri

我想打开一个打印对话框。我已经有十年没有用VB编程了,我有点生疏了

我得到了一个MS Access VB脚本的副本,该脚本选择一个MDB文件,然后只打印一个副本。我的思考过程是:

  • 打开一个对话框
  • 选择打印机
  • 输入份数
  • 印刷品
  • 目前,我要修改的原始脚本部分是:

    [SQL query above this]
    ....
    
    ' Open form
    Dim rs As DAO.Recordset
    Set rs = db.OpenRecordset("select@@identity")
    Debug.Print rs(0)
    
    Dim q As String
    q = "transfer_id=" & rs(0)
    DoCmd.OpenForm "Transfer Report", acNormal, , q, ,acDialog
    DoCmd.PrintOut
    
    ...
    [End If, End Sub, etc.]
    
    这只打印出报告的一个实例,公司无法同时打印其他副本。由于是在现场,他们无法使用复印机,但仍需要多份副本

    我找到的一个答案是David-W-Fenton(谢谢!),它展示了如何创建对话框;下面的脚本能完成我想做的事情吗?如何向对话框中添加一部分以指定要打印的份数

    ...  
    Dim varPrinter As Printer
    Dim strRowsource As String
    Dim q As String
    Dim rs As DAO.Recordset
    
    Set rs = db.OpenRecordset("select @@identity")
    Debug.Print rs(0)
    
    If Len(Me.OpenArgs) > 0 Then
      q = Me.OpenArgs
      Me.Tag = q
      For Each varPrinter In Application.Printers
       strRowsource = strRowsource & "; " & varPrinter.DeviceName
      Next varPrinter
      Me!cmbPrinter.RowSource = Mid(strRowsource, 3)
      ' first check to see that the report is still open
    If (1 = SysCmd(acSysCmdGetObjectState, acReport, q)) Then
       With Reports(q).Printer
         Me!cmbPrinter = .DeviceName
         Me!optLayout = .Orientation
         End With
        Me!txtPageTo = Reports(q).Pages
      End If
    End If
    
    Public Function PrintReport(q As String) As Boolean
      q = "transfer_id=" & rs(0)
     ' open report in PREVIEW mode but HIDDEN
     DoCmd.OpenReport q, acViewPreview, , , acHidden
     ' open the dialog form to let the user choose printing options
     DoCmd.OpenForm "dlgPrinter", , , , , acDialog, q
     With Forms!dlgPrinter
       If .Tag <> "Cancel" Then
        Set Reports(q).Printer = Application.Printers((!cmbPrinter))
        Reports(q).Printer.Orientation = !optLayout
        Application.Echo False
        DoCmd.SelectObject acReport, q
        DoCmd.PrintOut acPages, !txtPageFrom, !txtPageTo
        PrintReport = True
       End If
     End With
     DoCmd.Close acForm, "dlgPrinter"
     DoCmd.Close acReport, q
     Application.Echo True
    End Function
    
    。。。
    作为打印机的打印机
    Dim strowSource作为字符串
    Dim q As字符串
    Dim rs作为DAO.Recordset
    Set rs=db.OpenRecordset(“选择@@identity”)
    调试。打印rs(0)
    如果Len(Me.OpenArgs)>0,那么
    q=Me.OpenArgs
    Me.Tag=q
    对于应用程序中的每个varPrinter.Printers
    strRowsource=strRowsource&“;”&varPrinter.DeviceName
    下一台可变打印机
    我cmbPrinter.RowSource=Mid(strRowsource,3)
    '首先检查报告是否仍处于打开状态
    如果(1=SysCmd(acSysCmdGetObjectState,acReport,q)),则
    带报告(q)。打印机
    我CMB打印机=.DeviceName
    我optLayout=.Orientation
    以
    我txtPageTo=报告(q).页
    如果结束
    如果结束
    公共函数PrintReport(q为字符串)为布尔值
    q=“传输id=”&rs(0)
    '在预览模式下打开报告,但隐藏
    DoCmd.OpenReport q,acViewPreview,,实现
    '打开对话框窗体,让用户选择打印选项
    DoCmd.OpenForm“dlgPrinter”、、acDialog、q
    用表格!dlgPrinter
    如果。标记“取消”,则
    设置报告(q).Printer=Application.Printers((!cmbPrinter))
    报告(q).Printer.Orientation=!optLayout
    应用程序。回显错误
    DoCmd.SelectObject acReport,q
    DoCmd.acPages打印输出!txtPageFrom!txtPageTo
    PrintReport=True
    如果结束
    以
    文档关闭acForm,“dlgPrinter”
    文件关闭A报告,q
    应用程序。Echo True
    端函数
    
    检查有关
    打印输出方法的文档:

    在要修改的原始脚本中,只需将
    Copies
    参数添加到
    DoCmd.PrintOut
    语句中,如下所示:

    DoCmd.PrintOut副本:=x

    其中
    x
    是一个变量,表示要打印的份数

    查看
    DoCmd.OpenForm
    方法的文档

    我认为您的代码不允许用户输入副本的数量。我不在Access中编程,但我确信还有其他方法允许用户在运行时输入。在Excel/PowerPoint中,我们将使用输入框或用户表单

    我认为您可以在Access中使用输入框:


    检查有关
    打印输出方法的文档:

    在要修改的原始脚本中,只需将
    Copies
    参数添加到
    DoCmd.PrintOut
    语句中,如下所示:

    DoCmd.PrintOut副本:=x

    其中
    x
    是一个变量,表示要打印的份数

    查看
    DoCmd.OpenForm
    方法的文档

    我认为您的代码不允许用户输入副本的数量。我不在Access中编程,但我确信还有其他方法允许用户在运行时输入。在Excel/PowerPoint中,我们将使用输入框或用户表单

    我认为您可以在Access中使用输入框:


    这是一个迟来的回复,有时可能对其他人有所帮助

    要打开打印对话框,请执行以下操作:

    在报告上放置一个用于打印的命令按钮,并按如下所示编写代码

    Private Sub CmdbtnPrint_Click()
    DoCmd.RunCommand acCmdPrint
    End Sub
    
    将按钮的“显示时间”属性更改为“仅屏幕”

    在“acViewReport”视图模式下打开报告


    单击打印命令按钮,系统打印对话框将打开。设置参数并打印报告。

    这是一个延迟回复,有时可能对其他人有所帮助

    要打开打印对话框,请执行以下操作:

    在报告上放置一个用于打印的命令按钮,并按如下所示编写代码

    Private Sub CmdbtnPrint_Click()
    DoCmd.RunCommand acCmdPrint
    End Sub
    
    将按钮的“显示时间”属性更改为“仅屏幕”

    在“acViewReport”视图模式下打开报告

    单击打印命令按钮,系统打印对话框将打开。设置参数并打印报告