Office中国论坛/Access中国论坛

标题: 如何在报表的组页脚显示“第x页,共y页”? [打印本页]

作者: wuaza    时间: 2006-3-29 19:54
标题: 如何在报表的组页脚显示“第x页,共y页”?
如何在报表的组页脚显示“第x页,共y页”?

在页面页脚可以用"第"&&"页,共"&[pages]&"页",这个我知道。

因为我每一组是分开装订的,所以需要知道每一组的总页数和当前页数,这个在报表中该怎么显示?
作者: tz-chf    时间: 2006-3-29 22:21
northwind——各国雇员销售额
作者: wwwwa    时间: 2006-3-29 23:15
到目前为止,还没有直接

的方法做到
作者: sgrshh29    时间: 2006-3-30 03:28
以下是引用wuaza在2006-3-29 11:54:00的发言:


如何在报表的组页脚显示“第x页,共y页”?

在页面页脚可以用"第"&&"页,共"&[pages]&"页",这个我知道。

因为我每一组是分开装订的,所以需要知道每一组的总页数和当前页数,这个在报表中该怎么显示?

这是一个比较烦的事情,要用vba实现.示例希望对你有参考作用.[attach]16760[/attach]

作者: wuaza    时间: 2006-3-30 18:30
sgrshh29你的实例真是太棒了,多谢!
作者: winner    时间: 2006-3-30 23:22
好东西!这几天我也一直在搞这个问题,又是建临时表,又是追加删除的,麻烦死了,谢谢共享!
作者: winner    时间: 2006-3-30 23:48
奇怪,我在我的数据库上写例子的代码,居然显示为空,为什么会这样?而且为什么代码里有行号,删掉行吗?
作者: winner    时间: 2006-3-30 23:51
我只改了红色部分:

Option Compare Database
Dim GrpArrayPage(), GrpArrayPages()
Dim GrpNameCurrent As Variant, GrpNamePrevious As Variant
Dim GrpPage As Integer, GrpPages As Integer
Private Sub 页面页脚_Format(Cancel As Integer, FormatCount As Integer)
1001 Dim I As Integer
1002 If Me.Pages = 0 Then   '准备资料时计算各群组页数
1003    ReDim Preserve GrpArrayPage(Me.Page + 1)
1004    ReDim Preserve GrpArrayPages(Me.Page + 1)
1005    GrpNameCurrent = Me![WareHouse]    '取得现用群组字段之值
1006    If GrpNameCurrent = GrpNamePrevious Then '如果现用群组大于1页
1007        GrpArrayPage(Me.Page) = GrpArrayPage(Me.Page - 1) + 1
1008        GrpPages = GrpArrayPage(Me.Page)
1009        For I = Me.Page - ((GrpPages) - 1) To Me.Page
1010            GrpArrayPages(I) = GrpPages
1011        Next I
1012    Else                             '如果现用群组只有1页
1013        GrpPage = 1
1014        GrpArrayPage(Me.Page) = GrpPage
1015        GrpArrayPages(Me.Page) = GrpPage
1016    End If
1017 Else              '打印
1018     Me![PageNo].Caption = "  第 " & GrpArrayPage(Me.Page) & " 页,共 " & GrpArrayPages(Me.Page) & " 页"
1019 End If
1020 GrpNamePrevious = GrpNameCurrent

End Sub
Private Sub Report_Page()
GrpPage = 0
GrpPages = 0
GrpNameCurrent = ""
GrpNamePrevious = ""
End Sub
作者: winner    时间: 2006-3-31 01:14
请大家帮忙看一下,谢谢!
作者: tz-chf    时间: 2006-3-31 03:39
有这么复杂吗!和northwind有什么不同?
作者: wuaza    时间: 2006-3-31 05:01
我也出现了跟winner一样的问题,这个报表除了vba,其它还有什么奥妙的地方吗?

请高手看看。强烈企盼。



不信你可以在示例数据库中用向导再作一个报表,以名称分组,然后粘贴这些代码。

[此贴子已经被作者于2006-3-30 21:15:33编辑过]


作者: wuaza    时间: 2006-3-31 20:22
再顶,这个问题真是太怪了。
作者: sgrshh29    时间: 2006-3-31 20:46
以下是引用wuaza在2006-3-31 12:22:00的发言:


再顶,这个问题真是太怪了。

什么意思?没有什么隐藏起来不让你看到的东西啊。不然让我看看你的文件。
作者: winner    时间: 2006-3-31 21:35
标题: 不行的例子在此
[attach]16798[/attach]


请看看!谢谢!
作者: sgrshh29    时间: 2006-3-31 21:44
<DIV class=quote>以下是引用winner在2006-3-31 13:35:00的发言:


[attach]16799[/attach]

作者: winner    时间: 2006-3-31 22:00
不是很明白,请问你改了什么地方?
作者: wuaza    时间: 2006-4-1 17:16
我把组页眉的节前分页也加上了,可是还是不行,到底问题出在哪里?

sgrshh29你就别卖关子了,直说了吧。
作者: sgrshh29    时间: 2006-4-1 18:17
以下是引用wuaza在2006-4-1 9:16:00的发言:


我把组页眉的节前分页也加上了,可是还是不行,到底问题出在哪里?

sgrshh29你就别卖关子了,直说了吧。

对不起,决没有这个意思.请您检查一下组页眉中text111,这个文本框中,数据源是不是  & [pages] ?

另外,行号是没有用处的,最后显示的标签也可以是其它控件,名称对应就可以了.

[此贴子已经被作者于2006-4-1 10:24:10编辑过]


作者: wuaza    时间: 2006-4-1 18:28
天哪,怪不得,原来问题在这里。(隐藏的好深哦)

问题是解决了,可是还是不知其所以然,这个文本框的作用机理是什么呢?

sgrshh29你真是好人。
作者: sgrshh29    时间: 2006-4-1 18:32
我可没有隐藏它.在设计视图中看的清清楚楚的.因为vba中引用了page和pages这二个内置函数,所以在报表中要有这二个函数.至于为什么放在组页眉里呢,你一看代码就知道不能放在其它地方的.

[此贴子已经被作者于2006-4-1 10:33:58编辑过]


作者: teamark    时间: 2006-4-2 07:38
henhao
作者: winner    时间: 2006-4-4 01:26
还是不知道在哪?我例子里哪里有Text111
作者: 无忧    时间: 2006-4-4 01:33
以下是引用winner在2006-3-30 15:51:00的发言:


我只改了红色部分:

Option Compare Database
Dim GrpArrayPage(), GrpArrayPages()
Dim GrpNameCurrent As Variant, GrpNamePrevious As Variant
Dim GrpPage As Integer, GrpPages As Integer
Private Sub 页面页脚_Format(Cancel As Integer, FormatCount As Integer)
1001 Dim I As Integer
1002 If Me.Pages = 0 Then   '准备资料时计算各群组页数
1003    ReDim Preserve GrpArrayPage(Me.Page + 1)
1004    ReDim Preserve GrpArrayPages(Me.Page + 1)
1005    GrpNameCurrent = Me![WareHouse]    '取得现用群组字段之值
1006    If GrpNameCurrent = GrpNamePrevious Then '如果现用群组大于1页
1007        GrpArrayPage(Me.Page) = GrpArrayPage(Me.Page - 1) + 1
1008        GrpPages = GrpArrayPage(Me.Page)
1009        For I = Me.Page - ((GrpPages) - 1) To Me.Page
1010            GrpArrayPages(I) = GrpPages
1011        Next I
1012    Else                             '如果现用群组只有1页
1013        GrpPage = 1
1014        GrpArrayPage(Me.Page) = GrpPage
1015        GrpArrayPages(Me.Page) = GrpPage
1016    End If
1017 Else              '打印
1018     Me![PageNo].Caption = "  第 " & GrpArrayPage(Me.Page) & " 页,共 " & GrpArrayPages(Me.Page) & " 页"
1019 End If
1020 GrpNamePrevious = GrpNameCurrent

End Sub
Private Sub Report_Page()
GrpPage = 0
GrpPages = 0
GrpNameCurrent = ""
GrpNamePrevious = ""
End Sub

代码左侧有编号,这个编号是一个个手工加上去的吗?还是有什么设置?有编号会不会影响代码运行?要怎么设才能跟你的一样有代码?
作者: wuaza    时间: 2006-4-4 20:26
以下是引用winner在2006-4-3 17:26:00的发言:


还是不知道在哪?我例子里哪里有Text111



你例子里有个text21,你看看它的控件来源。

其实这个报表的设计除了vba 代码外,必须在报表里加入一个包含pages表达式的控件,有了pages,格式化事件就会先遍历全部页,以统计总页数, If Me.Pages = 0 Then  这一句才能得到多次调用。

这是关键。

这个示例中的数组技巧很值得学习!

[此贴子已经被作者于2006-4-4 12:26:36编辑过]


作者: winner    时间: 2006-4-4 21:34
谢谢!我看到了,原来text21在页眉缩到小小的.厉害!




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3