在Access开发的人事系统中,经常需要计算职员/员工的工龄,一般是根据离职日期(或当天日期)与入职日期对比来计算工龄,但有时不想显示为年,或月,或天,而是希望表现为 工龄为:多少年多少月。
这个代码和函数同样适用Excel.
这就需要使用VBA来做个自定义函数了
实现方法:
首先在模块中增加一个自定义函数,VBA代码如下:
'
''=============================================================================================
''函数名称: GetWorkMonth (计算工龄) 版本:1.01
''调用示例: GetWorkMonth(入职日期,离职日期)
'' gf_MsgBox(#2016/01/01#,Date())
''
''输入参数: (必需)datHireDate Variant 入职日期
'' (必需)datDisDate Variant 离职日期
''返 回: String
''适应版本: 97,2000,XP,2003,2007,2010,2013,2016 compatible
''作 者: 王宇虹 整理:王宇虹
''关 键 字: 工龄
''推荐指数: 3
''难度等级: 1
''适应场合: 人事系统中计算员工工龄
''说 明: 如果人事表员工有状态,可以不用离职日期来判断,可以用离职状态来判断
''=============================================================================================
''GUID: 72179DB9-68A6-4BBD-9609-1782023ABAC9 编码:1223233325 创建:2013/02/26 更新:2013/02/26
''=============================================================================================
Public Function GetWorkMonth(datHireDate As Variant, datDisDate As Variant) As String '用date 类型有空值传递不过来 出错
If Nz(datHireDate) <= #1/1/1900# Then '如果入职日期为空,则直接返回00年00月
GetWorkMonth = "00年00月"
Else
If Nz(datDisDate) < #1/1/1900# Then '如果离职日期为空,则用当前日期来算工龄
GetWorkMonth = Format(Fix(DateDiff("m", datHireDate, Date) / 12), "00") & "年" & Format((DateDiff("m", datHireDate, Date) Mod 12), "00") & "月"
Else '如果离职日期不为空,用离职日期与入职日期来计算工龄
GetWorkMonth = Format(Fix(DateDiff("m", datHireDate, datDisDate) / 12), "00") & "年" & Format((DateDiff("m", datHireDate, datDisDate) Mod 12), "00") & "月"
End If
End If
End Function
2. 然后在查询中使用这个函数
工龄: GetWorkMonth([入职日期],[离职时间])