Ms access VBA中的Access 2007多报表配置

Ms access VBA中的Access 2007多报表配置,ms-access,printing,vba,ms-access-2007,Ms Access,Printing,Vba,Ms Access 2007,我目前正在编译一些代码,以便使用两个不同的报告执行以下操作: 最终用户输入报告参数范围的第一个和最后一个作业,然后单击按钮 开始作业存储在本地,计算第一个和最后一个之间的差值,并启动Do…Loop语句(带计数器),直到计数器等于差值 在循环过程中,作业参数增加1(与计数器相同),并打印报告 如果我已经把你弄糊涂了,下面是一些示例代码,可以直观地解释我目前正在做的事情: Dim NetJobVar As String Dim counter As Long NetJobVar = Me.ToJ

我目前正在编译一些代码,以便使用两个不同的报告执行以下操作:

  • 最终用户输入报告参数范围的第一个和最后一个作业,然后单击按钮
  • 开始作业存储在本地,计算第一个和最后一个之间的差值,并启动Do…Loop语句(带计数器),直到计数器等于差值
在循环过程中,作业参数增加1(与计数器相同),并打印报告

如果我已经把你弄糊涂了,下面是一些示例代码,可以直观地解释我目前正在做的事情:

Dim NetJobVar As String
Dim counter As Long
NetJobVar = Me.ToJob - Me.FromJob
counter = 0

DoCmd.SetWarnings False
'Query to add first job parameter to local table
Me.JobStatus.Visible = True

Do
    Me.JobStatus.Caption = "Printing " & Me.FromJob + counter & "..."
    'Insert report code here
    'Query to add 1 onto Job stored in local table
    counter = counter + 1
Loop Until counter = NetJobVar + 1

Me.JobStatus.Visible = False
我已经把一切都计划好了除了这个。。。我希望在Do…Loop语句中实际打印报表之前,先显示两个不同的打印机配置窗口(例如,强制报表在VBA/模块中打印)。否则,可能会导致无数的提示和非常不满意的最终用户

我之所以需要两个配置提示,是因为我们将作业打印到两个不同的纸盘(两种不同颜色的纸张)

我偶然发现了一些东西。。。这些都有帮助,但还没有达到我想要达到的程度


让我知道你们的想法

考虑绕过任何打印配置对话框的需要。相反,使用VBA的对象自动选择打印机设置,包括
方向
纸张大小
、和
纸盒
(用于纸盘)等

以某种方式将下面的脚本集成到您的循环中。我提供了一份详尽的
纸盒
常数列表,供您决定将哪批报告发送到哪一个托盘以存放彩色纸张。若将相同的报告打印到不同的纸盘,只需添加行以选择新的纸盒,然后再次打印报告

Dim rpt As Access.Report

'Open report with any filters
DoCmd.OpenReport "JobsReport", acPreview, , "Job=" & Me.FromJob + counter
Set rpt = Reports("JobsReport")

'Set the default printer's orientation to portrait/landscape
rpt.Printer.Orientation = acPRORPortrait

'Set the default printer's paper size to letter/legal/tabloid/A3/A4
rpt.Printer.PaperSize = acPRPSLetter

'FIRST TRAY ----------------------------------------------
'Set the default printer's paper bin
rpt.Printer.PaperBin = acPRBNUpper 

'Print Report
DoCmd.OpenReport "JobsReport"

'SECOND TRAY  ----------------------------------------------
'Set the default printer's paper bin
rpt.Printer.PaperBin = acPRBNLower 

'Print Report
DoCmd.OpenReport "JobsReport"

'Constants for PaperBin
'acPRBNUpper = 1  ' Use paper from the upper bin
'acPRBNLower = 2  ' Use paper from the lower bin
'acPRBNMiddle = 3  ' Use paper from the middle bin
'acPRBNManual = 4  ' Wait for manual insertion of each sheet of paper
'acPRBNEnvelope = 5  'Use envelopes from the envelope feeder
'acPRBNEnvManual = 6  ' Use envelopes from the envelope feeder, but wait for manual insertion
'acPRBNAuto = 7  '(Default) Use paper from the current default bin
'acPRBNTractor = 8  ' Use paper from the tractor feeder
'acPRBNSmallFmt = 9  ' Use paper from the small paper feeder
'acPRBNLargeFmt = 10  ' Use paper from the large paper bin
'acPRBNLargeCapacity = 11  ' Use paper from the large capacity feeder
'acPRBNCassette = 14  'Use paper from the attached cassette cartridge
'acPRBNFormSource = 15  ' Use paper from the forms bin

Set rpt = Nothing

需要哪两种配置?哪些报告与哪个配置相匹配?@Parfait我需要打印配置屏幕(在报告上选择“打印”时,在报告上选择Ctrl+P,
docmd.runcommand accmdprint
在VBA中打开报告后,等等)两次,基本上是这样。我是使用本机访问打印功能还是创建自己的打印功能不是问题。@Parfait另外,为了进一步说明,我将在一个访问报告上运行两个打印配置屏幕,但通过Do…Loop语句运行同一报告n次。这可能行得通!将您的概念构建到我的循环语句中。。。我是否可以通过打印机对象为一个纸盘配置报告,强制打印,为下一个纸盘配置,再次强制打印,然后为下一个作业重复循环?此外,我还需要最终用户提供一些纸盘位置的输入,因为每个打印机打印的彩色纸盘不同。正如我在回答中提到的,只需添加另一行即可更改
纸盒
常数并再次打印。请参见编辑,其中我表示第一个和第二个托盘。此外,我还添加了
PaperBin
常量值。考虑添加一个COMBOX框(隐藏值,但显示bin描述)以供用户在第一个和第二个托盘打印报告之前选择,并将值传递到<代码> Pasbin < /Cord>表达式中。谢谢您的帮助,PaFaIT!很好!