2013-07-18 158 views
0

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

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

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

目前,原来的剧本我想修改的部分是:

[SQL query above this] 
.... 

' Open form 
Dim rs As DAO.Recordset 
Set rs = db.OpenRecordset("[email protected]@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 

回答

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

4

这是一个迟到的回复,有时它可以帮助别人。

为了打开打印对话框:

将有关报表打印命令按钮,并编写代码如下所示。

Private Sub CmdbtnPrint_Click() 
DoCmd.RunCommand acCmdPrint 
End Sub 

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

以'acViewReport'视图模式打开报告。

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