excel - 坚持使用 excel 审计历史跟踪器
问题描述
我正在尝试组合一个审计跟踪器,以便我可以知道人们何时更改了共享文件。我想我已经接近了,但就是无法越界!
在三种情况下,VBA 应通过在“用户日志”表中输入用户详细信息和更改的详细信息来提醒“客户数据”表中的任何更改:
- 当有人覆盖现有数据时
- 当有人删除一行时
- 当有人添加一行时
我已经想出了如何做 1 或 2&3,但不能将它们结合在一起。
它取自几个不同的来源,可以解释任何不一致之处(另外我还在学习)。
我当前的代码如下:
Dim PreviousValue
Private Sub worksheet_selectionchange(ByVal target As Range)
'reset previous val
PreviousValue = target.Value
End Sub
Private Sub Worksheet_Change(ByVal target As Range)
Static lngRow As Long
Dim rng1 As Range
Dim i As Long
Dim ws As Worksheet
Set ws = Sheets("User Log")
Set rng1 = ThisWorkbook.Names("RowMarker").RefersToRange
If lngRow = 0 Then
lngRow = rng1.Row
Exit Sub
End If
i = ws.Range("A" & Rows.Count).End(xlUp).Row + 1
'track a row deletion
If rng1.Row < lngRow Then
With ws
.Range("A" & i).Value = Application.UserName
.Range("B" & i).Value = ActiveSheet.Name
.Range("E" & i).Value = "Row Removed"
.Range("F" & i).Value = Format(Now(), "dd/mm/yyyy, hh:mm:ss")
End With
Set rng1 = ThisWorkbook.Names("RowMarker").RefersToRange
End If
'track a row addition
If rng1.Row > lngRow Then
With ws
.Range("A" & i).Value = Application.UserName
.Range("B" & i).Value = ActiveSheet.Name
.Range("E" & i).Value = "Row Added"
.Range("F" & i).Value = Format(Now(), "dd/mm/yyyy, hh:mm:ss")
End With
Set rng1 = ThisWorkbook.Names("RowMarker").RefersToRange
End If
'track an overwrite
If rng1.Row = lngRow Then
With ws
.Range("A" & i).Value = Application.UserName
.Range("B" & i).Value = ActiveSheet.Name
.Range("C" & i).Value = target.Address
.Range("D" & i).Value = PreviousValue
.Range("E" & i).Value = target.Value
.Range("F" & i).Value = Format(Now(), "dd/mm/yyyy, hh:mm:ss")
End With
End If
End Sub
当我覆盖现有数据时,这开始起作用,但是只要我添加一行,它就会记录下来,但随后会卡住,任何其他更改都会显示为“添加的行”。它(现在)根本不跟踪行删除。非常感谢任何帮助!
解决方案
推荐阅读
- graphql - graphql,将大查询拆分为小查询
- c# - 如何对隐藏在其他元素中的字典进行 XML 反序列化?
- android - LibGDX 错误:程序类型已存在
- mysql - MySQL 未在 XAMPP MacOS 上启动
- git - 恢复这些文件后,文件是否会在下一次 git pull 时被删除?
- symfony - 如何通过一对多双向获取第二个实体的数据
- java - SonarQube 从 jacoco 结果计算错误的代码覆盖率
- widget - 在模型更改时刷新 CKEditor5 小部件
- python - 使用大小写转换在 Spyder 中替换正则表达式
- git - 将一个分支的提交(带有合并)压缩到另一个分支