access 报表中序号自动_access 报表中序号自动_学会在Access报表中补空行和自动加序号的方法...

我一直用微软的Access数据库储存学校所有学生的数据,义务教育档案的整理全部依赖于这个数据库。虽然在用Access,但懂得并不是很多,也就是照猫画虎而已。在整理档案的过程中出现两个问题一直困扰着我,一个就是在打印报表的时候数据不足15个的时候,下面总是有空白,很不美观,另外一个就是在档案中的表册都有序号,但是通过查询出来的一些间隔数据的序号还得另加字段,很是

news_show_1290604.shtml,表册多的话,更是烦人。

没办法,只得把数据库里面的数据复制到电子表格中通过手工加上表格线和序号。今天想到何不从网上找找看,有没有办法解决这两个问题。晚上花了不少时间从网上搜索相关的资料,终于把这两个问题解决了,很是高兴。

第一个问题是在数据不足一页的时候补上空行,需要的代码比较多,(其实我也不怎么懂代码,能看懂的改成自己的就行了,

news_show_1290604.shtml)也是非常复杂的,不太懂,也就不帖出来了,我有实例文件保存,呵呵。

1、在要补充空行的报表空白处右击,选择“事件生成器”→“代码生成器”,粘贴如下代码:

Private Sub 主体_Format(Cancel As Integer, FormatCount As

Integer)

SetDetailFormat Me, Txt总计数, 15,

0  ''15是每页的记录数(一般为15)

End Sub

Private Sub Report_Open(Cancel As

Integer)

''打开初始化值

LngAllRecords =

0

IntPageCount =

0

LngSectionCount

= 0

End Sub

Private Sub 页面页眉_Format(Cancel As

Integer, FormatCount As Integer)

IntPageCount = 0 ''页计数清零

End Sub

Private Sub Report_NoData(Cancel As

Integer)

MsgBox "没有数据!"

Cancel = True

End Sub

Private Sub 组页眉0_Format(Cancel As

Integer, FormatCount As Integer)

LngAllRecords =

0 ''节所有记录数清零

LngSectionCount = 0 ''节记录数清零

End Sub

2、在模块中新建一个名为“Comm_SetDetailFormat”的模块,打开并粘贴如下代码:

Option Compare Database

Option Explicit

'Private Const intCountPerPage =

15 ''是指定的每页打印记录行数,和前面的15一样。

Public LngAllRecords As

Long ''统计节全部记录数

Public IntPageCount As

Integer ''页计数

Public LngSectionCount As

Long ''节计数

Public Sub SetDetailFormat(ByVal TheReport As Report, ByVal

CountAllRows As Integer, Optional intCountPerPage As Integer = 15,

Optional SectionSurplusRows As Integer = 0)

'===============================================================================

'-函数名称: SelectDetailFormat

'-功能描述: 设置报表的不足补空行报表

'-输入参数说明:

参数1:TheReport 报表,输入me

' 参数2:CountAllRows 统计所有的行

' 请在报表上增加一个字段(例FieldsA),行来源为"=Count(*),可见性为否

' 参数3:intCountPerPage 每页的行数

' 参数4:SectionSurplusRows 分组剩余行给签名备注栏

'-返回参数说明: 无

'-使用语法示例: SetDetailFormat me,me.FieldsA,20

'-参考:

'-使用注意: 请在报表的Report_Open事件中输入:TempRows=0 '初始化

'-兼容性: 2000,XP已测试

'-作者: 何勇, Email:Cuxun@qq.com ,QQ:100810401

'-更新日期: 2007-9-21

'===============================================================================

On Error GoTo Err:

'当有页面汇总时在页面页脚下相应减去节计数

'LngSectionCount = LngSectionCount - 1

LngAllRecords = LngAllRecords +

1 ''全部的记录计数

IntPageCount = IntPageCount +

1 ''页计数

LngSectionCount = LngSectionCount + 1

''节计数 ''当每节的数据大于最大的数据,并且当页的行数小于每页最低行数时新加空白行

If LngSectionCount >= CountAllRows And IntPageCount

< intCountPerPage - SectionSurplusRows

Then TheReport.NextRecord = False

End

If ''当页包含空行的数据等于最低行数时判断

If IntPageCount Mod intCountPerPage = 0 Then

''分页

TheReport.Section(0).ForceNewPage = 1

Else

''不分页

TheReport.Section(0).ForceNewPage = 0

End

If ''把前面的空行内的数据隐藏成白色

If IntPageCount > CountAllRows Or LngSectionCount

> CountAllRows Then

showHideCtrlAtDetail TheReport, False

Else

showHideCtrlAtDetail TheReport, True

End If

Err:

''不显示出错提示

' If Err.Number <> 0 Then MsgBox

Err.Description

Exit Sub

End Sub

Private Sub showHideCtrlAtDetail(ByVal TheReport As Report, ByVal

isShow As Boolean)

Dim Ctr1 As Control

''只针对主体页

For Each Ctr1 In TheReport.Section(acDetail).Controls

If Ctr1.ControlType = acTextBox Then

If isShow = False Then

Ctr1.ForeColor = 16777215

Else

Ctr1.ForeColor = 0

End If

End If

Next

End Sub

3、添加“排序与分组”字段,设计页面会生成该字段的页眉和页脚,设置好字段的分组功能,然后在页脚处新建一个控件来源为“=Count(*)”的控件。修改该页脚和该控件的可见属性为“否”。

4、注意:班级页眉的名称为要和第一段代码“Private Sub

组页眉0_Format(Cancel As Integer,

FormatCount As Integer)”处的红色部分一样。其他的我也说不上什么,对代码不是太懂,呵呵。

第二个问题是在报表中加序号,很简单的,帖出来吧:在报表的主体中设一个文本框,控件来源:=1,在其“运行总和”属性中选择:工作组之上或总和之上。两种选择的不同效果是,如果你的报表分组了,工作组之上的自动编号范围就只限于分组内,如跨组则重新从1开始(这应该是比较常用的),而总和之上是跨组一直自动编下去的。

当然这得感谢“论坛-中文Access开发社区”中的“咱家是猫”和“何勇”两位高手,我就是把他们的代码拿过来,简单得改了一下,就完事了,

news_show_1290604.shtml

很晚了,两个问题解决以后,下学期的档案就用不着再复制到Excel表格中了,哈哈。

2009年8月30日补充:为了不至于忘记,现在把有关于第一个问题的代码实例帖出来,有兴趣的朋友可以下载试试看,如果有更好的办法,还请多多指教并留言,谢谢了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本想自动读取报表的纸张大小,但返回来值都是默认纸张的大小,所以用了<BR>Selest case 词句,但这样结果是纸张的类型不齐全。没有类型对应的纸张的在大小不能正确判断(此情况下,如果提供的参数不正确,报表结果将会变乱。此时只要调整一下参数。即得到正确的报表。)。如果有谁能解决此问题,请告知一声。 <P><P>以下为新的函数说明:<BR>==============================================================<BR>函数名:RepDetail_Format()<BR>调用报表必须使用控件:(文本框)<BR>txtRecord_NO 在主体节 可见 用于显示记录,可选<BR>txtTotGrp 在主体节 不可见 =Count(*) 用于取得报表的总记录数,必须<BR>txtCurrentPage 在主体节 不可见 =[Page] 用于取得当前页数,必须<P>参数说明: RepName 报表名称 (当前报表可用 (Me), 其它报表可用:(Reports.报表名)引用),必须<BR>txtCurrentPage 报表主体节上的[txtCurrentPage]文本框控件 ,必须<BR>txtRecordNum 报表定义的私人变量 数据类型:Integer 用于记录数的递增,必须<BR>(注:在报表模块顶部声明 : Private txtRecordNum As Integer )<BR>txtTotGrp 报表主体节上的[txtTotGrp]文本框控件 ,必须<BR>IntPrintLen 报表打印的行数。<BR>-----数据类型:Integer (注:不可超过每页允许的最大记录数),可选,(默认:25 行)<BR>DouPageLine 报表主体记录部分打印长度。<BR>-----数据类型:Double (注:不可超过每页允许的最大记录数),可选,(默认:21 CM )<BR>FontSize 报表记录部分字。<BR>-----数据类型:Integer (注:不可超过每页允许的最大记录数),可选,(默认:0 字不变)<BR>txtRecord_NO 记录序号文本框名称。<BR>-----数据类型:String (注:不可超过每页允许的最大记录数),可选,(缺省为没有使用)<P><BR>使用方法:<BR>1,先定义一私人变量:Private txtRecordNum As Integer,必须<BR>2,报表主体节的格式化事件中调用(Detail_Format 事件)<BR><BR>调用方法:NextRecord=RepDetail_Format(RepName , txtCurrentPage.text , txtRecordNum , txtTotGrp.text , IntPrintLen)<BR>使用示例:NextRecord = RepDetail_Format(Me, [txtCurrentPage], txtRecordNum, [txtTotGrp], 20)<BR>本函数由 binuochao (许伟军) 完成。制作于2003-06-27 Email:[email protected] QQ:10077241<P><BR>=============================================================  

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值