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 |