我在表单上有一个按钮,点击它就会生成我的报告。在该报告的Load
事件中,我正在尝试获取总页数。我在DB中需要它们,但每当我尝试Me.Pages
时,我在Load Event中只得到1。
我在报告的Current
和Activate
事件中也尝试过这样做,但总页数为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).Pages
或DCount
方法对页面进行求和
我用了前者(确保报告中有一个文本框,其中前一种方法的控件属性设置为=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