如果你有一个如下公文阅办单,为了便于以后回快速回顾文件记录,我们通常需要单独记录一下收发文日期等信息,比较麻烦,本文将教你在阅办单填写完成时,自动生成统计表。
文件阅办单 | |||
编 号 | 阅【2025】**号 | ||
文件标题 | |||
收文日期 | 来文单位 | ||
文件字号 | 附 件 | ||
承办委员 | |||
拟办意见 | |||
批示 | |||
承办情况 | |||
备 注 | |||
传阅发送人 | 发送时间 | ||
- 打开 Excel 文件,确保 “开发工具” 选项卡已启用。如果没有启用,可在 Excel 选项的 “自定义功能区” 中勾选 “开发工具”。
- 切换到 “开发工具” 选项卡,点击 “Visual Basic” 按钮,打开 VBA 编辑器。
- 在 VBA 编辑器中,点击 “插入” 菜单,选择 “模块”,在右侧的代码窗口中输入以下代码:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lastRow As Long
Dim wsRead As Worksheet
Dim wsStat As Worksheet
Dim sendTimeCell As Range
' 设置阅办单工作表和统计表工作表
Set wsRead = ThisWorkbook.Sheets("阅办单")
Set wsStat = ThisWorkbook.Sheets("统计表")
' 设置发送时间所在的单元格
Set sendTimeCell = wsRead.Cells(15, 4)
' 检查修改的单元格是否为发送时间单元格
If Not Intersect(Target, sendTimeCell) Is Nothing Then
If sendTimeCell.Value <> "" Then
' 找到统计表中数据的最后一行,若为空表则从第一行开始
If wsStat.Cells(wsStat.Rows.Count, 1).End(xlUp).Row = 1 And wsStat.Cells(1, 1).Value = "" Then
lastRow = 1
Else
lastRow = wsStat.Cells(wsStat.Rows.Count, 1).End(xlUp).Row 1
End If
' 将阅办单中的数据复制到统计表的新行
wsStat.Cells(lastRow, 1).Value = wsRead.Cells(2, 2).Value ' 编号
wsStat.Cells(lastRow, 2).Value = wsRead.Cells(3, 2).Value ' 文件标题
wsStat.Cells(lastRow, 3).Value = wsRead.Cells(4, 2).Value ' 收文日期
wsStat.Cells(lastRow, 4).Value = wsRead.Cells(4, 4).Value ' 来文单位
wsStat.Cells(lastRow, 5).Value = wsRead.Cells(6, 2).Value ' 承办委员
wsStat.Cells(lastRow, 6).Value = wsRead.Cells(15, 4).Value ' 发送日期
End If
End If
End Sub
代码解释
- 定义变量:定义了必要的变量,包括用于存储最后一行行号的 lastRow,以及表示 “阅办单” 和 “统计表” 的 wsRead 和 wsStat,还有发送时间单元格 sendTimeCell。
- 检查修改单元格:使用 Intersect 函数检查修改的单元格是否为发送时间单元格,并且该单元格有值时才执行后续操作。
- 确定新增行位置:通过 End(xlUp) 方法找到 “统计表” 中数据的最后一行,如果 “统计表” 为空,则从第一行开始写入数据;如果不为空,则在最后一行的下一行新增记录。
- 复制数据:将 “阅办单” 中相应单元格的数据复制到 “统计表” 的新增行对应列中。
- 打开 VBA 编辑器:在 Excel 界面按下 Alt F11 组合键打开 VBA 编辑器。
- 找到 “阅办单” 工作表代码窗口:在 VBA 编辑器左侧的 “项目资源管理器” 中找到 “阅办单” 工作表,若 “项目资源管理器” 未显示,可通过 “视图” 菜单 -> “项目资源管理器” 打开。
- 粘贴代码:双击 “阅办单” 工作表,在右侧弹出的代码窗口中粘贴上述代码。
- 保存并关闭 VBA 编辑器:确保代码无误后,关闭 VBA 编辑器。
- 测试功能:在 “阅办单” 工作表中填写发送时间单元格,此时 “统计表” 应会新增一行记录相应数据。
- 文件格式:请将文件保存为启用宏的 .xlsm 格式,因为 .xlsx 格式不支持宏代码,若不保存为 .xlsm 格式,宏代码将无法保存和运行。
- 单元格位置调整:上述代码假定了数据在 “阅办单” 工作表中的位置,如果实际数据位置有变动,需要相应修改代码中读取单元格的引用。例如,若编号单元格位置改变,需修改 wsRead.Cells(1, 2).Value 中的行号和列号。
如需以上公文阅办单模版关注 评论,私信我领取!
,