如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
Excel在工程预算中的应用陶虹Ξ(内江师范学院计算机与信息科学系,四川内江641112)摘要:介绍了excel在工程预算应用开发中的设计思路,实现技术。关键词:excel;vba;工程预算中图分类号:TP317文献标识码:A文章编号:1671-1785(2005)04-0037-03每当提到应用开发时,人们总是习惯的想到各种编程语言,其实在已有的软件基础上进行开发,不仅可以节约投资,提高开发效率,同时也是完全符合软件重用思想的。充分利用excel中的表格制作、数据计算、vba程序设计功能[1],在excel现有功能的基础上进行扩充可以方便的进行各种数据应用处理,从而大大的节约人力及物力。本文介绍了利用excel设计工程预算中应用时的设计思路及相应的实现技术。1问题描述工程预算需要制作预算编制说明、工程预算表、汇总材料表、议价材料表、取费报??等。工程预算项目表是其他数据的基础,是数据量最大的。在工程预算项目表中,需进行大量的工程量计算。一般每个省都有建筑清单计价定额,包括定额编号、名称、单位、单价以及人机材等子项。2设计思路根据工程预算的具体情况,有固定的表格格式,工程量定额数据量大且规范,能根据定额编号确定相应的名称、单位等,结合excel的相关功能,作如下设计:(1)在access中设计数据库,包括定额数据、工程数据、模板数据等(2)设计或导入模板文件(3)在工程量输入时,首先输入定额编号,如果库中已经存在该定额则自动填充名称、单位、单价等数据;否则则弹出窗口增加数据。这样数据将越来越丰富。在输入完定额编号后,再输入数量,合价将自动产生。(4)定额数据库具有导入功能(5)报表打印(6)其他辅助功能3实现技术以下程序及各种操作环境是winxp、excel2000,程序是excel中的vb编辑器下编写(即vba语言),excel中有很好的在线帮助。3.1模板建立、导入及使用模板可对照具体的表格建立,考虑到已经有较多的excel报表文件,故设计了宏代码实现对现有excel文件进行导入,并对其中的列项与数据库相关字段进行绑定,并将该绑定存储于数据库中,用于数据录入及报表生成。只要在系统基本数据库结构建立完善的基础上,这项功能能够让系统通过不断得导入新的模板而得到极大地增强,同时也不需要对该类应用重新编写代码。ActiveWorkbook1SaveAsFilename:="模板文件名",FileFormat:=xlTemplate,Password:="",WriteResPassword:="",?73?第20卷第4期No14Vol120内江师范学院学报JOURNALOFNEIJIANGTEACHERSCOLLEGE收稿日期:2004-07-05作者简介:陶虹(1976-),男,四川内江人,内江师范学院助教。ReadOnlyRecommended:=False,CreateBackup:=FalseInsertinto模板数据库(模板文件名,表名,字段名,单元格名)value(......)3.2excel与access数据库的连接该连接应放在工作薄打开事件中,注意要在vb编辑器的工具菜单的引用项引用dao315或以上。Dimdb1AsDatabaseDimrs1AsRecordsetSetdb1=OpenDatabase("数据库名称")Setrs1=db11OpenRecordset("select3fromXXX")3.3跟踪单元格数据,数据查询及填充在工具栏上放置了数据自动填充的开关按钮宏(即一个Boolean变量),使用时可以打开或关闭自动填充功能,当打开时,在应该输入定额编号的数据区域有输入,程序将获取该数据并在定额库中查询,然后完成自动填充或弹出新增数据窗口,这是本应用的一个主要程序。PrivateSubWorksheet_Change(ByValTargetAsRange)Remchange事件在单元格数据改变后失去焦点时引发OnErrorgotoenRem在选中多个单元格修改时,或者Target1Value是NULL值时,程序会出Rem错,该错误可以被忽略。Dimdb1AsDatabaseDimrs1AsRecordsetDimstrtmpAsStringSetdb1=OpenDatabase("数据库名称")Setrs1=db11OpenRecordset("select3fromXXX")IfTarget1Column=1AndTarget1Row>3AndTrim(Target1Value)""Thenrs11FindFirst"定额编号='"&Target1Value&"'"IfNotrs11NoMatchThenstrtmp="b"&Trim(Str(Target1Row))'Sheet11Range