0

我想打开一个打印对话框。我已经有十年没有在 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.]

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

我找到的一个答案是 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
4

2 回答 2

5

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

为了打开打印对话框:

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

Private Sub CmdbtnPrint_Click()
DoCmd.RunCommand acCmdPrint
End Sub

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

以“acViewReport”查看模式打开报告。

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

于 2014-06-03T20:04:27.890 回答
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

于 2013-07-18T03:09:53.550 回答