标题 | 用Excel VBA实现物业收据的打印 |
范文 | 代远大+钟鸣+李建平 摘要:以一览表形式逐行建立的数据记录,便于集中浏览。但在实际工作中,通常要以记录为单位,按预定的格式,进行独立页面打印输出。利用Excel VBA编写简单程序代码,可以轻松实现。 关键词:Excel VBA;数据一览表;物业收据;打印 中图分类号:TP37 文献标识码:A 文章编号:1009-3044(2017)35-0227-02 当前,物业管理行业的收费名目繁多,收据格式五花八门,没有通用的收据打印软件。部分物业公司还在采用手工填写方式,劳神费时,容易出错;有的使用从网上下载的免费软件,感觉又不能满足公司的特殊需要,用起来不顺手。面对这种状况,如何利用现有应用软件,设计满足自身需要的物业收据打印系统,是一个值得探讨的问题。 1 需求分析 各物业小区业主收费信息,以一览表的形式分别存放在各个工作表中,每个业主的数据形成一行记录,需要实现以下功能: 可以按预定的格式,分别不同的物业小区,向前、向后逐个浏览各业主的物业费用信息,对显示的当前业主物业收据进行打印,对指定范围内的业主物业收据进行批量的、连续的打印。 2 开发环境 Microsoft Office Excel 2007中文版。 3 设计过程 1) 新建一个Excel2007工作簿文档,保存为启用宏的工作簿“Property.xlsm”。 2) 新建两个工作表,表标签名称分别以各物业小区名称命名,分别为“白鹤印象”、“蔚蓝天空”,用于存放两个物业小区收费信息,表列内容包含房号、姓名、水电气数据、物业费、其它等(如图1所示)。 3) 新建一个工作表,表标签名称为“收据打印”(如图2所示),用于浏览显示、打印输出预定格式物业收据。将工作表上部的B2:L11单元格区域设置为打印区域,下部的B12:L13 单元格区域为打印控制区,其内容不打印输出。 4) 对“收据打印“工作表物业小区后边的D4单元格进行数据有效性设置:在允许下拉列表框中选择“序列”,在来源下面的文本框中输入“白鹤印象,蔚蓝天空”。 5) 对“收据打印”工作表的相关单元格设置公式: No. K3: =YEAR(TODAY())&MONTH(TODAY()) (将当前年月自动冠于收据编号前) L3: =$F$12 (将当前记录号自动作为收据编号) 房号G4: =OFFSET(INDIRECT($D$4&"!A4"),$F$12,) 姓名J4:=OFFSET(INDIRECT(D4&"!B4"),$F$12,) 水表上月读数E6:=OFFSET(INDIRECT(D4&"!C4"),$F$12,) 电表上月读数E7:=OFFSET(INDIRECT(D4&"!F4"),$F$12,) 气表上月读数E8:=OFFSET(INDIRECT(D4&"!I4"),$F$12,) 水表本月读数G6:=OFFSET(INDIRECT(D4&"!D4"),$F$12,) 电表本月读数G7:=OFFSET(INDIRECT(D4&"!G4"),$F$12,) 气表本月读数G8:=OFFSET(INDIRECT(D4&"!J4"),$F$12,) 水实用数I6= =G6-E6 电实用数I7= =G7-E7 气实用数I8= =G8-E8 水单价K6: =OFFSET(INDIRECT(D4&"!E4"),$F$12,) 电单价K7: = OFFSET(INDIRECT(D4&"!H4"),$F$12,) 气单价K8: = =OFFSET(INDIRECT(D4&"!K4"),$F$12,) 水费L6: =ROUND(I6*K6,2) 电费L7: =ROUND(I7*K7,2) 氣费L8: =ROUND(I8*K8,2) 物业费E9: =OFFSET(INDIRECT(D4&"!L4"),$F$12,) 其他费I9:=OFFSET(INDIRECT(D4&"!M4"),$F$12,) 物业费与其他费小计L9: =E9+I9 收据总金额(小写)L10:=SUM(L6:L9) 收据总金额(大写)H10: =SUBSTITUTE(SUBSTITUTE(TEXT(TRUNC(FIXED(L10)),"[>0][dbnum2];[<0]负[dbnum2];;")&TEXT(RIGHT(FIXED(L10),2),"元[dbnum2]0角0分;;"&IF(ABS(L10)>1%,"元整",)),"零角",IF(ABS(L10)<1,,"零")),"零分","整") 制票日期F11:=YEAR(TODAY())&"年"&MONTH(TODAY())&"月"&DAY(TODAY())&"日" 6) 在“收据打印”工作表中添加一个数值控件(用于控制选择当前记录号),右击控件,在菜单中选择“设置控件格式”,在设置窗口中,将当前值、最小值、步长值均设置为1,最大值根据需要设为足够大的一个整数(以保证能控制各物业小区的最多业主数量),单元格链接为$F$12(与当前记录号单元格建立关联)。当按下控件的向上、向下箭头按钮时,当前记录号单元格$F$12值发生加1、减1的变化,引发与之相关的所有公式单元格的值发生变化,形成联动效应,从各物业信息工作表中适时获取对应的数据,显示在“收据打印”工作表的单元格中。 7) 在”收据打印”工作表中添加两个按钮控件,标题分别为“打印当前页”、“打印指定页” 8) 为“打印当前页”按钮指定宏,名称为PrintCurPage_click,用VBA编写以下代码: Sub PrintCurPage_Click() n = MsgBox("确定打印当前业主收据吗?", vbOKCancel) If n = vbOK Then ActiveSheet.PrintOut End Sub 9) 为“打印指定页”按钮指定宏,名称为PrintRange_click,用VBA编写以下代码: Sub PrintRange_Click() startNum = Range("F13") endNum = Range("H13") '——-起始页员小于或等于终止页号时进行打印,否则提示错误信息后退出 If startNum <= endNum Then n = MsgBox("确定打印第 " & startNum & "~" & endNum & " 页号吗?", vbOKCancel) If n = vbOK Then Range("F12") = startNum '——-将当前页号设置为指定的初始页号 '——-开始从指定页号到终止页号的循环打印 For i = startNum To endNum ActiveSheet.PrintOut '——-打印当前记录 Range("F12") = Range("F12") + 1 '——-将下一记录转为当前记录 Next i End If Else MsgBox "错误:起始页号应小于或等于终止页号,请重新输入!" End If End Sub 10) 将“收据打印”工作表中当前页号、指定页F12、F13、H13以外的全部单元格锁定,并对该工作表设置保护,防止对其它非编辑单元格(特别是打印区域单元格)的误操作。 4 运行测试 在“收据打印”工作表中,点击物业小区D4右边的下拉箭头,可以对物业小区进行切換显示。点按数值控件的向上、向下箭头,分别向前、向后翻页显示各业主的物业收据。接通打印机,点击“打印当前页”按钮,对当前业主的物业收据进行了正确的打印输出;输入起始记录号和终止记录号,点击“打印指定页”按钮,指定范围内的全部业主收据实现了批量的、连续的打印输出。运行测试正常,满足设计需求。 5 设计结论 在Excel工作表中,以一览表形式存储的数据记录,可以进行按预定格式的显示和打印输出。利用Excel VBA 编写简单的代码,可以轻松实现复杂逻辑操作过程的批处理,极大地提高工作效率。 参考文献: [1] 黄海. Excel公式函数图表VBA一本通[M].北京:中国青年出版社,2008. [2] 姚文涛.Excel VBA 应用开发经典实例[M].北京:清华大学出版社,2009. [3] Excel Home. Excel2007应用大全[M].北京:人民邮电出版社,2012. |
随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。