VBA基础
Access报表补空行另类打印方法
2009-05-15 08:51:25

1、创建临时表(临时初婚表)

2、创建两个查询,“查询1”用于求得每组中的记录数,“初婚表打印查询”用作报表“初婚表打印2”的记录源

3、创建报表“初婚表打印2”,设置分组(ID村居)页眉和页脚

4、报表“初婚表打印2”格式化代码:

 Option Compare Database Option Explicit Dim k, T1, T2 As Integer  'T1为组中的当前页数,T2为组中的总页数 Dim j, j1 As Integer Dim Stemp As String

Private Sub 页面页眉_Format(Cancel As Integer, FormatCount As Integer) Me!i = Me!i - 1 End Sub

Private Sub 主体_Format(Cancel As Integer, FormatCount As Integer) Me!i = Me!i + 1 '行数计数累加 End Sub

Private Sub 主体_Print(Cancel As Integer, PrintCount As Integer) On Error GoTo Err_主体_Print j1 = 12  '设定每页打印行数 If i <= j1 - 1 Then     T1 = 1 Else     If i Mod j1 = 0 Then         k = Int(i / j1)         For j = 1 To k             T1 = j         Next     Else         T1 = k + 1     End If End If

Dim rs As ADODB.Recordset Set rs = New ADODB.Recordset Stemp = "select * from 临时初婚表 where [村居ID]='" & Me.[村居ID] & "'" rs.Open Stemp, CurrentProject.Connection, adOpenKeyset, adLockOptimistic

If rs.RecordCount <= j1 Then     T2 = 1 Else     T2 = Int(rs.RecordCount / j1)   ' 如果不要补空行,则 T2=Int(rs.RecordCount / j1) +1,其实因为补了空行,每组的记录数(包括空行数),都是j1的倍数 End If     T0 = "第" & [T1] & "页/共" & [T2] & "页 " rs.Close Set rs = Nothing Exit_主体_Print:     Exit Sub Err_主体_Print:     MsgBox Err.Description     Resume Exit_主体_Print End Sub

Private Sub 组页眉0_Format(Cancel As Integer, FormatCount As Integer)

Me!i = 0 '保证分组后,序号从1开始计数

End Sub

5、“连续打印”单击事件:

Private Sub Command10_Click() On Error GoTo Err_Command10_Click Dim i, i2, i3 As Long Dim k As Long '打印总行数 Dim j As Integer j = 12    '每页打印行数 Dim Stemp As String

Dim rs As ADODB.Recordset Set rs = New ADODB.Recordset Stemp = "select * from 临时初婚表" rs.Open Stemp, CurrentProject.Connection, adOpenKeyset, adLockOptimistic

Dim rs2 As ADODB.Recordset Set rs2 = New ADODB.Recordset Stemp = "select * from 初婚表" rs2.Open Stemp, CurrentProject.Connection, adOpenKeyset, adLockOptimistic

Dim rs3 As ADODB.Recordset Set rs3 = New ADODB.Recordset Stemp = "Select 初婚表.村居ID, Count(初婚表.[家庭编号]) AS 记录数 FROM 初婚表 GROUP BY 初婚表.村居ID" rs3.Open Stemp, CurrentProject.Connection, adOpenKeyset, adLockOptimistic '--------打印前,清空临时表中的记录 If rs.RecordCount > 0 Then rs.MoveFirst For i = 0 To rs.RecordCount - 1     rs.Delete 1     rs.Update rs.MoveNext Next End If '--------把所有要打印的记录,插入到临时表中 rs2.MoveFirst For i = 0 To rs2.RecordCount - 1     rs.AddNew         rs![ID] = rs2![ID]         rs![村居ID] = rs2![村居ID]         rs![村居] = rs2![村居]         rs![家庭编号] = rs2![家庭编号]         rs![育妇姓名] = rs2![育妇姓名]         rs![出生日期] = rs2![出生日期]         rs![婚姻日期] = rs2![婚姻日期]         rs![婚姻状况] = rs2![婚姻状况]         rs![配偶姓名] = rs2![配偶姓名]         rs![配偶出生日期] = rs2![配偶出生日期]         rs![配偶婚姻状况] = rs2![配偶婚姻状况]         rs![婚姻备注] = rs2![婚姻备注]         rs![登记日期] = rs2![登记日期]         rs![变更日期] = rs2![变更日期]

    rs.Update rs2.MoveNext Next '--------确定要补的空行数,并插入到临时表中 rs3.MoveFirst For i = 0 To rs3.RecordCount - 1     If rs3![记录数] Mod j = 0 Then         k = rs3![记录数]     Else         k = (Int(rs3![记录数] / j) + 1) * j     End If         For i3 = 1 To k - rs3![记录数]         rs.AddNew             rs![村居ID] = rs3![村居ID]         rs.Update     Next rs3.MoveNext Next '--------以预览的方式 打开报表 DoCmd.OpenReport "初婚表打印2", acViewPreview

rs.Close Set rs = Nothing rs2.Close Set rs2 = Nothing rs3.Close Set rs3 = Nothing Exit_Command10_Click:     Exit Sub Err_Command10_Click:     MsgBox Err.Description     Resume Exit_Command10_Click End Sub

6、组合框[村居ID]的更新事件:

Private Sub 村居ID_AfterUpdate() Call Command10_Click End Sub

点击下载此附件

(报表设计-相关文章技巧链接):Access实现在报表最后一页列印空白表格线补满一页(补空行)