在MS-Access中打印对话框

时间:2013-07-18 00:45:40

标签: vba ms-access dialog

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

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

  1. 打开一个对话框;
  2. 选择打印机;
  3. 输入份数;
  4. 打印。
  5. 目前,我要修改的原始脚本部分是:

    [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
    

2 个答案:

答案 0 :(得分:4)

这是一个迟到的回复,有时可能会帮助其他人。

为了打开打印对话框:

在报告上放置PRINT命令按钮,然后按如下所示编写代码。

Private Sub CmdbtnPrint_Click()
DoCmd.RunCommand acCmdPrint
End Sub

更改&#39;显示时间&#39;按钮属性仅限屏幕&#39;。

在&#39; acViewReport&#39;中打开报告查看模式。

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

答案 1 :(得分:0)

查看有关PrintOut方法的文档:

http://msdn.microsoft.com/en-us/library/office/ff192667.aspx

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

DoCmd.PrintOut Copies:=x

其中x是表示您要打印的副本数量的变量。

查看DoCmd.OpenForm方法的文档,

http://msdn.microsoft.com/en-us/library/office/ff820845.aspx

我不认为您拥有的代码可以允许用户输入副本数量。我没有在Access中编程,但我某些还有其他方法可以在运行时允许用户输入。在Excel / PowerPoint中,我们将使用InputBox或UserForm。

我认为您可以在Access中使用InputBox:

http://office.microsoft.com/en-us/access-help/inputbox-function-HA001228856.aspx