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

时间:2015-11-06 15:22:31

标签: vba ms-access

我在表单上有一个按钮,点击它生成我的报告。在该报告的Load事件中,我试图获得总页数。我需要在我的数据库中使用它们,但每当我尝试Me.Pages时,我只能在Load事件中得到1。

我尝试使用CurrentActivate报告事件,但我总是得到总页数1.
任何解决方案?

2 个答案:

答案 0 :(得分:1)

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

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

然后,您可以在报告标题的Me.Pages事件中阅读Format。但是你仍然需要注意,在我的示例报告中,事件会触发两次,并且只有第二次返回实际的页面。 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是正确的数字。

答案 1 :(得分:0)

“我的表单”具有打印按钮,一旦按下该按钮,就会出现有关报告中页数的警告...,用户可以选择是或否进行打印。

您可以使用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