Vba MS Access中的打印对话框
我想打开一个打印对话框。我已经有十年没有用VB编程了,我有点生疏了 我得到了一个MS Access VB脚本的副本,该脚本选择一个MDB文件,然后只打印一个副本。我的思考过程是: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
[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”视图模式下打开报告
单击打印命令按钮,系统打印对话框将打开。设置参数并打印报告