网站首页  词典首页

请输入您要查询的论文:

 

标题 用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下载服务。

 

Copyright © 2004-2023 puapp.net All Rights Reserved
更新时间:2025/3/16 18:48:49