请求实现:Excel跨工作簿自动填充员工考勤标记“S”的方案
实现Excel考勤日志自动同步到年度追踪表的VBA方案
前提假设
确保你的文件符合以下设定(可根据实际情况调整代码对应部分):
- 每日考勤日志工作簿:
每日考勤日志.xlsx,其中用于录入请假信息的工作表(示例用「考勤记录」)中,A列存员工姓名,B列存请假日期(日期格式需和年度追踪表一致,如yyyy/mm/dd) - 年度考勤追踪工作簿:
年度考勤追踪.xlsx,每个员工的独立工作表名与日志中的姓名完全一致,工作表第一行是全年日期序列(从A1开始横向排列)
VBA代码实现
打开「每日考勤日志.xlsx」,右键点击「考勤记录」工作表标签 → 选择「查看代码」,粘贴以下代码:
Private Sub Worksheet_Change(ByVal Target As Range) ' 仅监控A、B列的单元格变更 If Intersect(Target, Me.Range("A:B")) Is Nothing Then Exit Sub Dim logWb As Workbook, trackWb As Workbook Dim empName As String, leaveDate As Date Dim trackWs As Worksheet, dateCol As Integer Dim cell As Range Set logWb = ThisWorkbook ' 检查年度考勤工作簿是否已打开,未打开则按路径打开 On Error Resume Next Set trackWb = Workbooks("年度考勤追踪.xlsx") On Error GoTo 0 If trackWb Is Nothing Then ' ↓↓↓ 替换成你的年度考勤工作簿实际路径 ↓↓↓ Set trackWb = Workbooks.Open("C:\Documents\年度考勤追踪.xlsx") End If ' 遍历所有变更的单元格(支持批量录入) For Each cell In Target ' 获取姓名和日期(无论修改姓名还是日期都能触发) If cell.Column = 1 And cell.Offset(0, 1).Value <> "" Then empName = cell.Value leaveDate = cell.Offset(0, 1).Value ElseIf cell.Column = 2 And cell.Offset(0, -1).Value <> "" Then empName = cell.Offset(0, -1).Value leaveDate = cell.Value Else GoTo NextCell ' 姓名或日期为空,跳过当前单元格 End If ' 检查员工工作表是否存在 On Error Resume Next Set trackWs = trackWb.Worksheets(empName) On Error GoTo 0 If trackWs Is Nothing Then MsgBox "未找到员工「" & empName & "」的年度考勤表,请核对工作表名。", vbExclamation GoTo NextCell End If ' 查找对应日期的列号 On Error Resume Next dateCol = trackWs.Rows(1).Find(What:=leaveDate, LookIn:=xlValues, LookAt:=xlWhole).Column On Error GoTo 0 If dateCol = 0 Then MsgBox "员工「" & empName & "」的考勤表中未找到日期「" & Format(leaveDate, "yyyy/mm/dd") & "」。", vbExclamation GoTo NextCell End If ' 填入"S"并保存 trackWs.Cells(2, dateCol).Value = "S" trackWb.Save NextCell: Set trackWs = Nothing Next cell ' 可选:自动关闭年度工作簿,取消注释即可 ' trackWb.Close SaveChanges:=False ' Set trackWb = Nothing End Sub
关键说明
- 触发逻辑:当「考勤记录」的A/B列有内容新增或修改时,自动触发同步
- 容错处理:会自动检测年度工作簿是否打开、员工工作表是否存在、日期是否匹配,异常情况弹出提示
- 批量支持:一次性录入多条请假信息时,会逐行处理同步
- 自动保存:同步完成后自动保存年度考勤工作簿,避免数据丢失
注意事项
- 务必替换代码中
Workbooks.Open的路径为你的年度考勤工作簿实际存放路径 - 保证日志表的日期格式与年度表第一行的日期格式完全一致(如都是日期格式而非文本)
- 员工姓名需完全匹配工作表名,包括空格、特殊字符
- 打开工作簿时需启用宏,否则代码无法运行
- 测试前建议备份两个工作簿,避免数据意外覆盖
内容的提问来源于stack exchange,提问作者Atxbobcat
相关产品推荐
相关产品推荐

