ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 16907|回复: 24

人力资源统计VBA的高级应用实例分析

[复制链接]

TA的精华主题

TA的得分主题

发表于 2007-12-21 21:39 | 显示全部楼层 |阅读模式
<p>凡从事人力资源工作的人都知道,工资保险岗位,统计分析报表比较多,相应干统计事务也多,统计的种类和操作也不同,有些统计工作是自己便表,设置指标,这种统计工作一般量不大,比较好干;有的统计工作需要从别人的数据表中提炼汇总,基础数据源不同,数据量也大,像单位一年的每月的工资数据存放在数据库中,如dbf,access等文件里,上千人的单位一年下来数据量比较大,而进行收入统计是年底的一项重要工作,它是职工各项社会保险的重要数据,也是统计月报的主要数据来源,同时,也是比较麻烦的统计工作,不少统计人员到年底要对数据进行核对,对收入数据进行汇总,大部分人不会编程,统计起来是件困难的事情。更麻烦的是很多相关的部门要求提供EXCE文件的格式制作上报文件,如:医疗保险的系统导入收入时要求提供EXCEL文件的格式;给领导提供分析表格也是EXCEL文件的格式,这就给统计工作带来一定的难度。要想提高工作效率,你必须使用提供数据的系统编程,这样以来,你的机器要安装这个系统,还要懂该语言编程,其统计结果还需要转换EXCE的格式,对编程来说提出了较高的要求。这种数据源很多,都采取这种方法显然是不行的。我在人力资源工作多年,本人以前做这项工作都要在不同的数据库系统中进行编程,如dbf用VFP编程,代码写在prg文件里,access数据库,代码写在“查询”和“窗体”文件中。后用VB调用db数据库等,再将统计结果导成EXCE文件,感到很麻烦,很累。在经过不断摸索之后,特别是自学习了EXCE VBA变成后,发现也能使用ODA对象,感到很高兴,因它可以连接不同的数据库,不考虑其来源,都能访问,其结果可以直接写入EXCE文件获WORD文件,无论在速度上,还是效率上都很好。于是就用它编写程序解决工作的实际问题。下面介绍的是以dfb数据库为例(这是我工作中的实际情况),试着编了一个小程序,其功能是将从dbf文件数据自动写入EXCEL文件中来,编完后经运行感到效果很好,简化了编程过程的繁杂,减少了转化格式的过程,也减轻了工作量。下面,介绍一下我的编程过程。<br/>&nbsp; 工作环境:我单位薪酬人员使用DBF数据库发工资,系统比较早,统计功能不能满足现在统计的需要。每月的工资汇总到一个总库里,数据库里,每位员工有12条记录,字段有:工号,姓名(简略了),部门名称,收入总额。其格式如下:</p><p> 3glzTZ0C.rar (30.86 KB, 下载次数: 872) <br/>(未完待续)<br/>
[此贴子已经被作者于2007-12-23 9:51:28编辑过]

调dbf文件数据自动写入EXCEL文件收入统计详解

调dbf文件数据自动写入EXCEL文件收入统计详解

调dbf文件数据自动写入EXCEL文件收入统计详解

调dbf文件数据自动写入EXCEL文件收入统计详解

调dbf文件数据自动写入EXCEL文件收入统计详解

调dbf文件数据自动写入EXCEL文件收入统计详解

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-12-22 20:43 | 显示全部楼层
<p><strong>人力资源统计VBA的高级应用实例分析(续)</strong></p><p>编写这样一个程序,需要具备三方面的知识技能,首先懂得数据库的基本知识,明白数据库的结构,理解字段、记录的含义;其次,掌握SQL语句基本用法,特别是查询语句的使用,即select 语句的不同用处;会用ADO对象,理解连接对象并会使用,理解记录集对象并会灵活地使用。这些对搞人力资源的专业人员来说有一定难度,本人也是在实际使用过程中,逐步掌握的,本身并不是计算机专业出身。最后是掌握一点VBA编程技术。只有这样你才能理解这段不长,但功能很强的代码。<br/>&nbsp; 程序的第一部分,就是前几行,以Dim开头的语句,这些是定义变量的,目的是为下面使用做基础的。<br/>&nbsp;Dim cnn As New ADODB.Connection<br/>&nbsp;Dim rs As New ADODB.Recordset<br/>&nbsp;这两句是定义ADO连接对象和记录集对象的变量,可以理解成我们借来两个大的机器设备,准备好两个地方。其他的变量是普通变量,从字母上也很好理解。比如:mymonth,就是一个统计月数的变量,统计12个月的数据,就付给它12,统计6个月的数据,就付给它6。<br/>为了使程序能找到dbf文件,必须确定当前的路径,接下来的语句就是取得路径的变量,通过ThisWorkbook.Path语句获得路径的。其语句为:<br/>&nbsp;&nbsp;&nbsp;&nbsp; myPath = ThisWorkbook.Path<br/>而下面的语句是定义了dbf文件的完整的文件名和路径<br/>&nbsp;&nbsp;&nbsp; xlsFile = Dir(ActiveWorkbook.Path &amp; "\payto2007.DBF")<br/>&nbsp;而下面5行,是个定势,是访问数据库dbf的固定模式,含义是连接一个dbf文件并使这个连接有效。语句为:<br/>&nbsp;&nbsp;&nbsp; cnnStr = "Driver={Microsoft Visual FoxPro Driver};" _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp; "SourceType=DBF;" _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp; "SourceDB=" &amp; myPath &amp; ";" _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp; "Exclusive=No;"<br/>&nbsp;&nbsp;&nbsp; cnn.Open cnnStr<br/>需要强调的是,这5行语句中,只有第三行使用了我们定义的变量,其他一律照搬,不需要理解也能用。这种使用的方法,如同我们使用电话机一样,我们知道打电话时,只管拨对号就是了,不必了解其构造。<br/>&nbsp;&nbsp; 在和数据库联通之后,就为我们查询数据提供了方便,就好比打开了一个仓库的大门,里面有很多的货物,下一步我们要采取何种办法,如何尽快找到我们需要的货物。对数据库而言,就要使用记录集了。<br/>&nbsp;&nbsp;&nbsp; 要完成对记录集的查询,有一个最好的方法,就是用SQL语句,SQL语句是针对各种数据库查询而设计的万能钥匙,其语法很简单,用语言叙述,就是要从那个数据表中,查看那些数据内容,也就是字段。语法是这样:select(查询语句开头) 字段名1,字段名2...&nbsp; from(从那个)&nbsp;&nbsp; 数据库名称。如我们写:<br/>select name,team,paytotal from pay2007&nbsp; 就是从表名为pay2007的表中,查看员工姓名,部门和收入总额。查看的内容一定和数据库里的字段名一致,如果我们想改名,就要在该字段后,写上as再写要显示的名称。如数据库员工姓名字段是name,要改为“姓名”,写成" name as 姓名"。有时候我们对查询需要汇总后的内容,那么,再学会使用group by这句。<br/>&nbsp;&nbsp;&nbsp; 好了,理解了SQL语句就掌握了这个程序的内容的80%。下面的语句也是个固定模式,理解为运行写好SQL语句并把结果放入内存。具体语句是:<br/>rs.Open SQL, cnn, adOpenDynamic, adLockOptimistic<br/>我们的目的是将查询的结果放入EXCEL表格中,不是放入内存,放入内存是看不到结果的。因此,要指定当</p><p>前的EXCEL表格,将内容拷入到表格当中去,在拷贝之前还要将表格清空,防止混乱,同时还要在第一行自动写入每行的标题。如下语句分别解释:</p><p>&nbsp;&nbsp;&nbsp; Sheets("累计收入").Activate 选定工作表语句<br/>&nbsp;&nbsp;&nbsp; Cells.Clear&nbsp; 表格清空<br/>&nbsp;&nbsp;&nbsp; 一下三行在第一行自动写入每行的标题,也是个固定用法<br/>&nbsp;&nbsp;&nbsp; For I = 1 To rs.Fields.Count<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cells(1, I) = rs.Fields(I - 1).Name<br/>&nbsp;&nbsp;&nbsp; Next I<br/>&nbsp;&nbsp;&nbsp; Range("A2").CopyFromRecordset rs 从表格第二行开始复制查询出来的记录<br/>&nbsp;&nbsp;&nbsp; rs.Close&nbsp; 关闭记录集<br/>&nbsp;&nbsp;&nbsp; 需要说明的是rs.Close语句。当一个查询语句使用后一定要关闭它。一来可以节省内存的空间,另外,也为建立新的记录查询做好准备。关掉后我们就可以再继续进行新的查询。这段程序之所以能完成三种不同的查询,技巧就在这里。很多教材在写ADO对象的使用时,往往使用的是单一的记录查询,会时读者理解成,一个数据源的连接,只能使用一次SQL语句。还有我们这里的记录集是针对一个dbf文件,实际上,当有其他的文件时,同样可以查询,这样一来,查询更多,使用起来更灵活。<br/>&nbsp;&nbsp; 罗唆了这么多,也不知道大家能不能看懂,我还是头回写这样的文字,感觉这里气氛很好,主要是想和大家共同分享,共同学习,在这里我得到过很多无私朋友的帮助,也想把我工作中的经验和大家说说。</p>
[此贴子已经被作者于2007-12-23 9:52:26编辑过]

TA的精华主题

TA的得分主题

发表于 2007-12-23 16:02 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2007-12-25 16:51 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2007-12-28 11:32 | 显示全部楼层
有些不懂,看来要下下来,慢慢研究。请问,如果碰到外籍员工的payroll怎么计算呢?因为要发放两种币种,RMB或者美金/欧元

TA的精华主题

TA的得分主题

发表于 2008-3-1 22:28 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
懂一些,慢慢消化,谢谢

TA的精华主题

TA的得分主题

发表于 2008-6-12 13:37 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
佩服佩服[em08]

TA的精华主题

TA的得分主题

发表于 2008-6-20 21:32 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2008-6-23 19:00 | 显示全部楼层

[求助]请求weiguoyin868老师帮忙解决问题

<p><font face="宋体" size="4">请教weiguoyin868老师</font></p><p> AkEgC150.rar (48.55 KB, 下载次数: 69) <br/></p><p><font size="4">尊敬的<font face="宋体">weiguoyin868老师,您好。</font></font></p><p><font size="4">以上图片显示的是用鼠标点击Excel工作表时就会出来一大串“工具栏”。</font></p><p><font size="4">我是新手,在学习VBA录入宏时,不知道做了哪些操作,结果造成现在图片显示那样。现在是不管什么(Excel)文件,只要在工作表上击右键就会出来一大串的“工具栏”,我把录入的的宏全部删除还是不行。请老师指点,我该如何处理这个问题。在下先谢了。</font></p><p><font size="4">如果老师觉得这是个案的话,也可以把解决办法发到我的邮箱:<a href="mailto:sznywyc@sina.com">sznywyc@sina.com</a></font></p><p><font size="4">再次谢谢。</font></p>

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-6-25 18:52 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-8 02:14 , Processed in 0.029628 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表