最近在整理跑团财务收支明细表时,因为要上传公布到管理群,为防止被误操作,就想要自动保存这张表的修改记录及时间,通过度娘找到了一些比较可行的代码。但必须要注意一点,以下代码的运行是建立在工作薄允许运行宏的基础上的。

1. 修改记录

1)在Excel工作薄中新建2个工作表,分别命名为“收支明细表”和“修改记录”;

2)在工作表“修改记录”中从A1至E1开始录入“修改单元格地址”、“修改前内容”、“修改后内容”、“修改时间”、“修改人”,然后对当前工作表设置密码保护(密码为666),最后右击工作表标签点击隐藏,以最大限度防止被人为修改;

3)回到“收支明细表”,右击该工作表标签点击“查看代码”打开代码编辑窗口;

4)在代码编辑窗口左侧找到“Sheet1(收支明细表)”代码窗口录入以下代码并保存:

Dim ad, t

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ad = Target.Address '定义变量ad为修改的单元格地址
t = Target.Value '定义变量t为单元格修改前的内容
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
With Sheets("修改记录")
    x = .Range("A65536").End(xlUp).Row + 1 '查找工作表A65535单元格向上,最后个非空单元格的下一行行号
    .Unprotect Password:=666 '撤消工作表保护
    .Cells(x, 1) = ad '修改的单元格地址
    .Cells(x, 2) = t '修改前的内容
    .Cells(x, 3) = Target.Value '修改后的内容
    .Cells(x, 4) = Now() '修改时间
    .Cells(x, 5) = Application.UserName '用户名
    .Protect Password:=666 '保护工作表,密码为666
End With
End Sub

通过以上代码即可实现对工作表“收支明细表”数据进行修改时,在加密保护并隐藏的工作表“修改记录”中进行记录,需要查看时取消隐藏该工作表就可以了。

2. 修改时间

1)在工作薄的任一工作表标签上右击,点击“查看代码”打开代码编辑窗口;

2)在代码编辑窗口左侧找到工作簿事件代码窗口“ThisWorkbook”代码窗口录入以下代码并保存:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) 
    Sheets("收支明细表").Range("A3") = Now 
End Sub

通过以上代码即可实现在“收支明细表”工作表中的“A3”表格里显示最后的修改保存时间。