设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 86806|回复: 202
打印 上一主题 下一主题

[报表] 【源码】报表分页总计及补空行示例

[复制链接]
跳转到指定楼层
1#
发表于 2010-9-18 09:00:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 红尘如烟 于 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

复制代码
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 1经验 +10 收起 理由
todaynew + 10 我很赞同

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏6 分享分享 分享淘帖 订阅订阅
2#
发表于 2010-9-18 09:26:26 | 只看该作者
先学习--收藏!谢谢!

点击这里给我发消息

3#
发表于 2010-9-18 09:52:28 | 只看该作者
谢谢分享!!
4#
发表于 2010-9-18 09:52:50 | 只看该作者
谢谢分享!!
5#
发表于 2010-9-18 09:56:19 | 只看该作者
谢谢,收下了
6#
发表于 2010-9-18 09:57:27 | 只看该作者
报表分页总计及补空行示例
7#
发表于 2010-9-18 09:59:59 | 只看该作者
这个应该有用哦! 大力支持一下。
8#
发表于 2010-9-18 10:18:02 | 只看该作者
好东西,好心情
9#
发表于 2010-9-20 15:10:13 | 只看该作者
10楼的问题如何解决?

点击这里给我发消息

10#
发表于 2010-9-20 15:46:19 | 只看该作者
回复 红尘如烟 的帖子
奇怪了,我原来在一台电脑测试没有问题,现在另一台电脑却有10楼说的问题!同样是XP+ACCESS2003的环境.
运行出错,提示引用不存在的对象,ngLeft = rpt.Section(acDetail).Controls(0).Left这句话反相显示。
ycxchen 发表于 2010-9-18 11:13

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-1 07:16 , Processed in 0.082884 second(s), 38 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表