MS-Access 中的打印对话框

Ste*_*eve 1 ms-access vba dialog

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

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

  1. 打开一个对话框;
  2. 选择打印机;
  3. 输入份数;
  4. 打印。

目前,我要修改的原始脚本部分是:

[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.]
Run Code Online (Sandbox Code Playgroud)

这只会打印一份报告,该公司无法同时打印其他副本。由于是在现场,他们无法使用复印机,但仍需要多份副本。

我发现 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
Run Code Online (Sandbox Code Playgroud)

小智 6

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

要打开打印对话框:

在报告上放置一个打印命令按钮,并编写如下代码。

Private Sub CmdbtnPrint_Click()
DoCmd.RunCommand acCmdPrint
End Sub
Run Code Online (Sandbox Code Playgroud)

将按钮的“显示时间”属性更改为“仅屏幕”。

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

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