Office中国论坛/Access中国论坛

标题: 【源码】报表分页总计及补空行示例 [打印本页]

作者: 红尘如烟    时间: 2010-9-18 09:00
标题: 【源码】报表分页总计及补空行示例
本帖最后由 红尘如烟 于 2010-9-18 19:17 编辑

Access的报表存在一个问题,无论你在设计视图中将控件对的看上去多么整齐,但预览的时候通过控件边框显示出来的表格线条仍然会出现错位现象,而通过报表的Line方法来画表格就没有这个问题了,而且在不用到临时表的情况下,画表格也是补空行的好办法。

  1. '=======================================================================
  2. '函数名称: ReportSheet
  3. '功能描述: 简单报表中用来画表格并实现补空行,用于打印单据类每页样式固定的报表
  4. '输入参数: rpt               必需的,报表对象,使用时用Me关键字引用
  5. '          RowsOfPage        必需的,每页要显示的记录行数
  6. '          Style             可选的,表格样式,0为网格式,1为横格式,2为竖格式
  7. '          HasColumnHeader   可选的,是否对列标题同样画表格
  8. '返回参数: 无
  9. '使用示例: 在窗体的Page事件中调用: ReportSheet Me,30
  10. '相关调用:
  11. '使用注意: 主体节中的控件必须是索引从左到右,可以通过选中主体节中的所有控件,然后剪切再粘贴的操作来处理
  12. '兼 容 性:
  13. '参考资料:
  14. '作   者: 红尘如烟
  15. '创建日期: 2010-9-17
  16. '=======================================================================
  17. Public Function ReportSheet(rpt As Report, _
  18. ByVal RowsOfPage As Integer, _
  19. Optional ByVal Style As Integer = 0, _
  20. Optional ByVal HasColumnHeader As Boolean = True)
  21. Dim intI As Integer
  22. Dim lngTop As Long '表格上边距,即报表页眉的高度
  23. Dim lngBottom As Long '表格下边距,报表页眉的高度 +主体节高度×每页要显示的记录数
  24. Dim lngLeft As Long '表格左边距,第一个控件的左边距
  25. Dim lngRight As Long '表格右边距,最后一个控件的左边距+最后一个控件的宽度
  26. Dim lngRowHeight As Long '行高,即主体节高度
  27. Dim lngMaxIndex As Integer '主体节控件最大索引值

  28. lngRowHeight = rpt.Section(acDetail).Height
  29. lngMaxIndex = rpt.Section(acDetail).Controls.Count - 1
  30. lngTop = rpt.Section(acPageHeader).Height
  31. lngBottom = lngTop + lngRowHeight * (RowsOfPage)
  32. lngLeft = rpt.Section(acDetail).Controls(0).Left
  33. lngRight = rpt.Section(acDetail).Controls(lngMaxIndex).Left + rpt.Section(acDetail).Controls(lngMaxIndex).Width

  34. If HasColumnHeader Then
  35.     RowsOfPage = RowsOfPage + 1
  36.     lngTop = lngTop - lngRowHeight
  37. End If

  38. '样式为1(竖线格样式)时不画横线
  39. If Style <> 1 Then
  40.     For intI = 0 To RowsOfPage
  41.         rpt.Line (lngLeft, lngTop + lngRowHeight * intI)-(lngRight, lngTop + lngRowHeight * intI)
  42.     Next
  43. End If
  44. '样式为2(横线格样式)时不画竖线
  45. If Style <> 2 Then
  46.     For intI = 0 To lngMaxIndex
  47.          rpt.Line (rpt.Section(acDetail).Controls(intI).Left, lngTop)-(rpt.Section(acDetail).Controls(intI).Left, lngBottom)
  48.     Next
  49. '在最右边画竖线
  50. rpt.Line (lngRight, lngTop)-(lngRight, lngBottom)
  51. End If
  52. End Function

复制代码


作者: lkkl66    时间: 2010-9-18 09:26
先学习--收藏!谢谢!
作者: tmtony    时间: 2010-9-18 09:52
谢谢分享!!
作者: sxb2007    时间: 2010-9-18 09:52
谢谢分享!!

作者: zyp    时间: 2010-9-18 09:56
谢谢,收下了
作者: hljthzbc    时间: 2010-9-18 09:57
报表分页总计及补空行示例
作者: ZHENGLIAN    时间: 2010-9-18 09:59
这个应该有用哦! 大力支持一下。
作者: aslxt    时间: 2010-9-18 10:18
好东西,好心情
作者: ycxchen    时间: 2010-9-18 10:56
谢谢分享,学习!
作者: ycxchen    时间: 2010-9-18 11:13
运行出错,提示引用不存在的对象,ngLeft = rpt.Section(acDetail).Controls(0).Left这句话反相显示。
作者: huangqinyong    时间: 2010-9-18 14:11
学习一下,
作者: t小宝    时间: 2010-9-18 15:56
很好的方法和代码!!
作者: ZBJKJH    时间: 2010-9-18 18:10
学习
作者: fnsmydyang    时间: 2010-9-18 23:37
学习红尘老师精品之作,哈哈。。。
作者: fnsmydyang    时间: 2010-9-18 23:37
学习红尘老师精品之作,哈哈。。。
作者: gaofei186    时间: 2010-9-19 08:02
看看一下
作者: xuwenning    时间: 2010-9-19 08:25
谢谢分享
学习了
作者: c101    时间: 2010-9-19 09:41
谢谢分享
作者: ljp518    时间: 2010-9-19 10:31
,学习
作者: apsfxc1    时间: 2010-9-19 10:33
感谢分享
作者: yihesmxx    时间: 2010-9-19 12:12
学习学习
作者: jackysu78    时间: 2010-9-19 20:01
学习
作者: kangking    时间: 2010-9-20 09:59
拿来学习。
作者: 轻风    时间: 2010-9-20 10:52
很好,谢谢分享。
作者: ycxchen    时间: 2010-9-20 15:10
10楼的问题如何解决?
作者: t小宝    时间: 2010-9-20 15:46
回复 红尘如烟 的帖子
奇怪了,我原来在一台电脑测试没有问题,现在另一台电脑却有10楼说的问题!同样是XP+ACCESS2003的环境.
运行出错,提示引用不存在的对象,ngLeft = rpt.Section(acDetail).Controls(0).Left这句话反相显示。
ycxchen 发表于 2010-9-18 11:13


作者: aone    时间: 2010-9-20 17:02
报表画线确实很头疼!
作者: ycxchen    时间: 2010-9-20 17:32
是不是ACCESS2003也分精简版与完整版的?以致会出现10楼的情况?
作者: t小宝    时间: 2010-9-20 21:22
原来没有10楼问题的电脑现在也有问题了,晕
不过好象发现了一点问题:
我刚重装了OFFICE2003完整版的,反而有问题,而原来没有问题时装的却是雨林木风精简版的。

作者: 想做NO.1    时间: 2010-9-21 09:02

作者: guzhonghua26    时间: 2010-9-25 15:46
学习一下,谢谢分享。
作者: luhao    时间: 2010-10-13 00:39
look look
作者: haocyc    时间: 2010-10-13 10:26
我要学习下
作者: pipu7749    时间: 2010-10-15 22:12
試看看

作者: zx994398    时间: 2010-10-29 09:55
高手如云啊,虚心求教,学习中……
作者: 石三少    时间: 2010-10-29 13:47
看看
作者: chaosheng    时间: 2010-10-29 14:14
谢谢分享
作者: j8311456    时间: 2010-10-29 15:06
谢谢分享
作者: yanwei82123300    时间: 2010-11-22 10:15
谢谢分享!!

作者: ralfchai    时间: 2010-11-23 11:49
谢谢分享,学习!
作者: goto2008    时间: 2010-11-23 21:48
学习
作者: lingjiang    时间: 2010-11-24 23:09
先学习--收藏!谢谢
作者: pwj2009    时间: 2010-12-2 10:12
..哇。!!
作者: zbjit    时间: 2010-12-17 17:42
找到了,多谢
作者: li08hua    时间: 2010-12-17 18:12
谢谢指教!
作者: QBH    时间: 2011-1-10 21:46
谢谢~学习一下
作者: xyh2732    时间: 2011-1-10 22:13
学习学习
作者: 大胆    时间: 2011-1-10 23:51
学习呀,看来我什么都不懂呀,谢谢了
作者: wang1950317    时间: 2011-1-11 15:01
收藏学习!谢谢!
作者: xiaowuo2    时间: 2011-1-12 09:08
老师的作品,要顶的
作者: hxn    时间: 2011-1-25 17:50
study

作者: sd大海无量    时间: 2011-2-1 19:32
谢谢楼主!!!!
作者: foxcong    时间: 2011-2-2 03:11
学习中
作者: tzjj    时间: 2011-2-5 11:01
学习学习
作者: 明镜    时间: 2011-2-5 15:17
谢谢分享!!
作者: hkbb100    时间: 2011-2-14 15:41
Thanks
作者: 简    时间: 2011-2-14 20:07
我在做报表,我要学习学习哈。
作者: wgh3g    时间: 2011-2-14 22:42
学习了
作者: momocaicai    时间: 2011-2-16 11:46
收藏了
谢谢
作者: 13555609005    时间: 2011-2-16 11:56
很好的功能,收藏了

作者: 文棣    时间: 2011-3-14 18:15
学习 用得着
作者: newglord    时间: 2011-3-23 15:48
ding yi xiaxia
作者: ptlijx    时间: 2011-3-23 19:59
很好
作者: dddd042821    时间: 2011-4-7 13:43
先学习--收藏!谢谢!
作者: zxy591    时间: 2011-4-7 22:03
好文章
作者: GAOZHONG    时间: 2011-4-9 08:17
正好有用!多谢了
作者: fxbianxiu    时间: 2011-4-11 11:51
好东西,收下,必须地
作者: roych    时间: 2011-4-11 15:34
学习下
作者: 真主    时间: 2011-4-11 18:49
谢了
作者: xxiaoxin321    时间: 2011-4-14 09:55
很好很强大!经常被报表对齐的问题困扰~~谢谢了!!!
作者: eedream    时间: 2011-5-4 18:36
不错  谢谢!
作者: liuhz2006    时间: 2011-5-6 18:16
先学习--收藏
作者: qczvba    时间: 2011-5-7 08:39
thank,一定好。谢版主。
作者: kucao520    时间: 2011-5-8 03:14
学习--收藏!谢谢!
作者: jay_0218    时间: 2011-5-17 13:53
xiexie fenxiang
作者: zsd5237    时间: 2011-5-23 06:30
学习再学习
作者: youchytan    时间: 2011-5-23 07:28
先收再细细研习
作者: mybigeng    时间: 2011-5-23 07:51
经典学习
作者: fyssz    时间: 2011-5-27 13:59
先学习--收藏!谢谢!
作者: Rules    时间: 2011-5-27 16:21
看看学学
作者: zhaozhuonayes    时间: 2011-5-27 16:47
学习了,太喜欢了
作者: 宿命的风    时间: 2011-5-27 17:39

作者: zyz218    时间: 2011-6-21 18:23
学习一下哦
作者: xiazaidj    时间: 2011-7-11 13:58
学习学习
作者: wmok    时间: 2011-7-12 02:43
看看,谢谢分享
作者: licongli    时间: 2011-7-12 10:45
看看。
作者: szgyyqty    时间: 2011-7-20 20:51
学习!学习!
作者: crmserver    时间: 2011-7-21 15:45
good!!!!!!!!!!!!
作者: yanghua1900363    时间: 2011-7-28 17:08
又出精品了 当然要学习!
作者: today416    时间: 2011-8-4 13:49
看看
作者: liusirang    时间: 2011-8-4 14:11
先学习--收藏!谢谢!
作者: today416    时间: 2011-8-4 14:38
发表于 2010-9-18 11:13 |只看该作者

运行出错,提示引用不存在的对象,ngLeft = rpt.Section(acDetail).Controls(0).Left这句话反相显示。
---------------------------------------------------------------
这个问题没解决办法么?我下下来运行也有这个问题
作者: kdjifir34562    时间: 2011-8-11 13:35
thanks
作者: huangli0356    时间: 2011-8-11 23:37
看了,可是不清楚之间的含义???
作者: tianya0073    时间: 2011-8-13 12:09
KKKKK
作者: u2u0    时间: 2011-8-14 10:23
办法不错,试试看
作者: 大懒猫68    时间: 2011-8-17 22:33
学习红尘老师精品之作,哈哈。。。
作者: wzh    时间: 2011-8-21 09:52
学习--收藏!谢谢!
作者: xiayumei    时间: 2011-8-25 10:57
学习中!
作者: MYPCOO    时间: 2011-9-5 21:08
谢谢分享!!




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