整理一下关于分栏及分页打印.

king06 2010-06-21 03:46:02
刚刚浏览了帖子,又看到有问这个问题的,所以发一个之前我写的分栏打印的代码供参考,希望对以后出现此类问题有所帮助:
(窗体上两个MSHFlexGrid,左右各一)
Option Explicit
Private RsPrint As ADODB.Recordset
Private CurPos As Long '游标当前记录的位置
Private SumPagesMoney As Currency
Private SumPagesCount As Long

Public Function DoModal(vRst As ADODB.Recordset)'记录源自己写好,传进来
Set RsPrint = vRst
frmPrint.Show
End Function

Private Sub Form_Load()
With frmPrint
.Appearance = 0
.AutoRedraw = 1
.BackColor = &H80000005 '背景颜色:白色
.BorderStyle = 0
.Height = 15000 '设置页面的大小(纸的大小)
.Width = 11760
.Top = 0
.Left = 0
.ClipControls = 0 'False
.FillStyle = 0 'Solid
.Caption = "paper"
End With
Label5.Caption = Trim(custdaily.Text1.Text)
Label10.Caption = Trim(custdaily.Text3.Text)

Call InitMSFG(MSHFlexGrid1)
Call InitMSFG(MSHFlexGrid2)

RsPrint.PageSize = MSHFlexGrid1.Rows - 1 '设置记录集中记录页里记录条数,也即要显示在每栏上的记录条数
CurPos = 0
SumPagesMoney = 0
SumPagesCount = 0
GoPrint '打印...
End Sub

Private Sub GoPrint()
Dim rc As Integer, cc As Integer '一页一栏的行数rc,列数cc
Dim prc As Integer '记录集内记录的总页数
Dim rctotal As Integer '总行数
Dim i As Integer
Me.Height = 15000
' Printer.ScaleMode = vbMillimeters

If RsPrint.RecordCount > 0 Then
prc = RsPrint.PageCount '
rctotal = RsPrint.RecordCount

RsPrint.MoveLast: RsPrint.MoveFirst
For i = 1 To RsPrint.RecordCount
SumPagesMoney = SumPagesMoney + Val(RsPrint.Fields(1).Value)
' SumPagesCount = SumPagesCount + Val(RsPrint.Fields(2).Value)
RsPrint.MoveNext
Next

RsPrint.MoveLast: RsPrint.MoveFirst
For i = 1 To prc Step 2
Call InitMSFG(MSHFlexGrid1)
Call InputMSFG(i, RsPrint, MSHFlexGrid1) '第一栏内容
If i + 1 <= RsPrint.PageCount Then
Call InitMSFG(MSHFlexGrid2)
Call InputMSFG(i + 1, RsPrint, MSHFlexGrid2) '第二栏内容
Else
MSHFlexGrid2.Visible = False
MSHFlexGrid2.Clear
End If

'页脚处理
Call LoacalSum(rctotal, i \ 2 + 1, IIf(prc Mod 2 = 0, prc / 2, prc \ 2 + 1))

' MsgBox ("打印第" & Fix(I / 2) + 1 & "页")
Me.PrintForm '输出到系统缺省打印机
Next
Else
MsgBox "查无此记录"
End If

' RsPrint.Close '关闭记录
' Set RsPrint = Nothing '释放缓冲区
End Sub

Private Sub InitMSFG(vMSF As MSHFlexGrid)
With vMSF
.Clear
.Top = 780

.Rows = 51 '设置一栏容纳的行数(包括列表头)
.Cols = 4
.FixedCols = 0
.FixedRows = 0
.BackColorFixed = 255
.BackColorBkg = -2147483639
.GridColor = 8454016
.GridColorFixed = 8454143
.Gridlines = 1
.MergeCells = 4
.BorderStyle = 1 '设置边框:有边框
.Appearance = 0

.ColWidth(0) = 600
.ColWidth(1) = 2600
.ColWidth(2) = 1500
.ColWidth(3) = 800
.TextMatrix(0, 0) = "序号"
.TextMatrix(0, 1) = "客户名称"
.TextMatrix(0, 2) = "总计金额"
.TextMatrix(0, 3) = "备注"

.Width = 5500 '设置宽度容纳一栏所有的列。
End With
MSHFlexGrid2.Left = MSHFlexGrid1.Left + MSHFlexGrid1.Width + 100
End Sub

'读取记录集中(vMSFG行数)的多条记录
Private Sub InputMSFG(vIntPage As Integer, rstData As ADODB.Recordset, vMSFG As MSHFlexGrid)
Dim i As Long, j As Long
Dim mMoney As Currency, mCount As Long
Dim mRowHeight As Integer
mRowHeight = vMSFG.RowHeight(0)

' rstData.AbsolutePosition = (vIntPage - 1) * rstData.PageSize + 1'仅向前游标或动态游标无用
For i = 1 To vMSFG.Rows - 1
If CurPos < RsPrint.RecordCount Then
CurPos = CurPos + 1
With vMSFG
.Row = i
.TextMatrix(i, 0) = CurPos

.TextMatrix(i, 1) = rstData.Fields(0).Value & ""
.TextMatrix(i, 2) = Format(rstData.Fields(1).Value & "", "0.00")
End With
mMoney = mMoney + Val(rstData.Fields(1).Value)
' mCount = mCount + Val(rstData.Fields(2).Value)
mRowHeight = mRowHeight + vMSFG.RowHeight(i)
rstData.MoveNext
End If
Next

With vMSFG
If .Row < .Rows - 1 Then '若最后一页的记录不够填充整张表
.Rows = .Row + 1
End If

.Rows = .Rows + 1
.TextMatrix(.Rows - 1, 0) = "小计"
.TextMatrix(.Rows - 1, 1) = ""
.TextMatrix(.Rows - 1, 2) = Format(mMoney, "0.00")
.TextMatrix(.Rows - 1, 3) = ""
.Height = mRowHeight + .RowHeight(.Rows - 1) '再设置一下表格显示高度
End With
End Sub

Private Sub LoacalSum(ByVal vIntI As Integer, ByVal vIntJ As Integer, ByVal vIntK As Integer)
'下置一横线,写总计之类
Label8.Caption = "(" & "金额" & ")" & Format(Val(MSHFlexGrid1.TextMatrix(MSHFlexGrid1.Rows - 1, 2)) + Val(MSHFlexGrid2.TextMatrix(MSHFlexGrid2.Rows - 1, 2)), "0.00")
Label3.Caption = "(" & "金额" & ")" & Format(SumPagesMoney, "0.00")
Label6.Caption = "共" & vIntI & "条," & vIntJ & "/" & vIntK & "页"

Line1.x1 = MSHFlexGrid1.Left
Line1.X2 = MSHFlexGrid1.Left + MSHFlexGrid1.Width + 100 + MSHFlexGrid2.Width
Line1.y1 = MSHFlexGrid1.Top + MSHFlexGrid1.Height + 300
Line1.Y2 = Line1.y1

Label7.Left = MSHFlexGrid1.Left: Label8.Left = Label7.Left + Label7.Width + 100
Label7.Top = Line1.y1 + 100: Label8.Top = Label7.Top
Label2.Left = Label7.Left: Label3.Left = Label8.Left
Label2.Top = Label7.Top + Label7.Height + 100: Label3.Top = Label2.Top

Label6.Left = Me.ScaleWidth - Label6.Width - 200
Label6.Top = Me.ScaleHeight - Label6.Height - 200

Label10.Left = Me.ScaleWidth - Label10.Width - 600
Label9.Left = Label10.Left - Label9.Width - 50
Label5.Left = Label9.Left - Label5.Width - 50
Label4.Left = Label5.Left - Label4.Width - 50
End Sub




...全文
262 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
做个记号,以后用得着
yangao 2010-06-21
  • 打赏
  • 举报
回复
学习~~~
孤独剑_LPZ 2010-06-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 chinaboyzyq 的回复:]
引用 2 楼 a124819202 的回复:


马夹好!
[/Quote]
king06 2010-06-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 chinaboyzyq 的回复:]
引用 2 楼 a124819202 的回复:


马夹好!
[/Quote]
天热了,不带马夹,,,,,,,这个小哥经常跟着我,就因为咱长得有点像...
lxq19851204 2010-06-21
  • 打赏
  • 举报
回复
感谢分享
chinaboyzyq 2010-06-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 a124819202 的回复:]

[/Quote]
马夹好!
chinaboyzyq 2010-06-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jhone99 的回复:]

感谢分享
[/Quote]
lyserver 2010-06-21
  • 打赏
  • 举报
回复
支持,顶!
a124819202 2010-06-21
  • 打赏
  • 举报
回复
jhone99 2010-06-21
  • 打赏
  • 举报
回复
感谢分享
《计算机应用基础》教材目录 项目一 计算机基础知识 任务一 认识计算机 1. 计算机概述 2. 计算机系统组成 任务二 信息的表示与存储 1. 字符在计算机中的表示 2. 常用计算单位与换算 3. 各种数制间的转换 任务三、了解微型计算机 1. 了解微型计算机的分类 2. 微型计算机的性能指标 3. 认识微型计算机的常用硬件设备 项目二 Windows XP操作系统 任务一 定制个性化Windows XP工作环境 1. 熟悉Windows XP的基本元素 2. Windows XP设置 任务二 管理文件和文件夹 1. 文件、文件夹及磁盘 2. 我的电脑 3. 资源管理器 4. 管理文件和文件夹 任务三、维护与管理系统 1. 系统组件与应用程序的安装和卸载 2. Windows XP的多用户环境 3. 系统环境的及时清理 项目三 文字处理软件 Word 2003 任务一 使用Word 2003写一封家书 1. Word 2003的启动与退出 2. Word 2003中文版窗口组成 3. 创建、打开和保存文档 4. 查找与替换 5. 编辑文档 任务二 编排家信的格式并打印 1. 文字格式的设置 2. 段落格式的设置 3. 页面设置 4. 打印预览 5. 打印 6. 项目符号和编号 任务三 使用 Word 2003制作环保小常识封面 1. 插入图片 2. 编辑和修饰图片 3. 设置图片格式 4. 艺术字 5. 自选图形 6. 文本框 任务四 制作环保小常识内容页第一页 1. 页眉和页脚 2. 文档背景 3. 页码 4. 插入分页符和分节符 5. 分栏 6. 首字下沉 7. 边框和底纹 任务五 制作美化课程表并打印输出 1. 创建表格 2. 编辑表格 3. 格式化表格 4. 文字和表格间的相互转换 项目四 电子表格Excel 2003 任务一、制作员工档案表 1. 建立工作簿并输入编辑数据 2. 格式化工作表 任务二、 统计员工培训成绩 1. 使用公式计算总分 2. 使用函数计算平均分、最高分和名次 任务三 制作员工工资表 1. 排序 2. 自动筛选 3. 分类汇总 任务四、创建员工销售统计图标 1. 创建图表 2. 编辑图表 项目五 PowerPoint 2003 幻灯片 任务一 制作北京奥运演示文稿 1. 创建演示文稿 2. 母板 3. 设计模版 4. 配色方案 5. 制作幻灯片 任务二 对背景奥运添加动画效果及多媒体效果 1. 用动画效果工具栏设置动画效果 2. 多媒体效果的加入 3. 多媒体对象的设置 任务三 放映北京奥运演示文稿 1. 设置放映方式 2. 幻灯片的放映 任务四 打包北京奥运演示文稿 项目六 网络技术及应用 任务一 计算机网络基础 1. 计算机网络的发展 2. 网络传输介质 3. 连接 Internet 4. Internet Explorer 8.0浏览器 任务二 电子邮件的申请及应用 1. 申请免费邮箱 2. 使用电子邮箱 3. 通讯录的使用 4. 网络硬盘的使用 5. Microsoft Office Outlook 2003的设置与使用 任务三 信息安全 1. 计算机病毒 2. 网络道德 3. 360杀毒软件的使用 项目七 多媒体应用基础 任务一、整理春游照片 1. 图形和图像 2. 图片的导入 3. Windows图片和传真查看器的使用 4. 光影魔术手简介 任务二 网上报考相片的调整 1. 图像格式转换 2. 缩小图片的文件体积 任务三 多媒体音频的使用 1. 音乐下载与试听的区别 2. 高保真音乐的音质 3. 常见音乐格式 任务四 多媒体视频的使用 1. 电视视频的制式 2. 视频分辨率 3. 刷新率 4. 常见视频格式 ----------------------- 《计算机应用基础》教材目录全文共3页,当前为第1页。 《计算机应用基础》教材目录全文共3页,当前为第2页。 《计算机应用基础》教材目录全文共3页,当前为第3页。

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧