在VBA ms访问中获取报表的总页数



我在表单上有一个按钮,点击它就会生成我的报告。在该报告的Load事件中,我正在尝试获取总页数。我在DB中需要它们,但每当我尝试Me.Pages时,我在Load Event中只得到1。

我在报告的CurrentActivate事件中也尝试过这样做,但总页数为1。
有什么解决方案吗?

Access避免计算Pages,除非绝对必要,因为这是一项昂贵的操作-必须提前格式化整个报告才能获得总页数。

要获得它,您需要在报表头中有一个ControlSource==[Pages]的Textbox控件。文本框可以是不可见的。如果您当前没有报告标题,请创建一个-它可能有很小的高度。

然后您可以在报告头的Format事件中读取Me.Pages。但您仍然需要注意,在我的示例报告中,事件激发了两次,只有第二次返回实际的Pages。FormatCount对我不起作用。

此代码

Private Sub Berichtskopf_Format(Cancel As Integer, FormatCount As Integer)
    Debug.Print "Header_Format, FormatCount = " & FormatCount & ": " & Me.Pages
End Sub
Private Sub Report_Load()
    Debug.Print "Load: " & Me.Pages
End Sub

给出以下结果:

Load: 0
Header_Format, FormatCount = 1: 0
Header_Format, FormatCount = 1: 65

65是正确的数字。

My Form有一个打印按钮,一旦按下,就会出现关于报告页数的警告。。。用户可以选择是或否进行打印。

您可以使用Reports(stDocName).PagesDCount方法对页面进行求和
我用了前者(确保报告中有一个文本框,其中前一种方法的控件属性设置为=Pages

Private Sub cmdPrint2_Click()
Dim stDocName As String
stDocName = "RPT_Purchases2"
DoCmd.OpenReport stDocName, acViewPreview, , , acHidden
Msg ="There are " & Reports(stDocName).Pages & " Pages to be printed." & (Chr(13)_ 
& Chr(10)) & (Chr(13) & Chr(10)) & "Do you want to continue?"      
Style = vbYesNo + vbInformation
Title = "Total Pages ... "
Response = MsgBox(Msg, Style, Title)
If Response = vbYes Then
    DoCmd.OpenReport stDocName, acViewPreview, , , acHidden
    DoCmd.PrintOut
    MsgBox ("Printing")
    Beep
Else
    MsgBox ("Print Job Canceled")
End If
Me.Refresh
End Sub

最新更新