跟踪对正在使用数据库更新的 Excel 工作簿所做的更改.(未共享工作簿)



我有一个名为A的excel工作簿。

数据库 B 正在实时更新 A

我们需要跟踪用户在工作簿 A 上所做的更改。

我编写了一个代码来跟踪用户所做的更改。 但是由于我需要预先存在的值,因此 Application.Undo 函数正在创建错误,因为数据库 B 正在更改工作簿 A,而不仅仅是用户。

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Sheets("LogDetails").Unprotect Password:="****"
If ActiveSheet.Name <> "LogDetails" Then
Application.EnableEvents = False
Sheets("LogDetails").Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Value = ActiveSheet.Name & " - " & Target.Address(0, 0)
Application.Undo
Sheets("LogDetails").Range("A" & Rows.Count).End(xlUp).Offset(0, 1).Value = Target.Value
Application.Undo
Sheets("LogDetails").Range("A" & Rows.Count).End(xlUp).Offset(0, 2).Value = Target.Value
Sheets("LogDetails").Range("A" & Rows.Count).End(xlUp).Offset(0, 3).Value = Environ("username")
Sheets("LogDetails").Range("A" & Rows.Count).End(xlUp).Offset(0, 4).Value = Now
Application.EnableEvents = True
End If
Sheets("LogDetails").Protect Password:="***"
End Sub

我需要跟踪用户对工作簿 A 的更改,而不会因数据库 B 对工作簿 A 所做的更改而出错。

我在想,如果我们在我添加的 IF 条件下说 和环境("用户名"(= "罗杰布" 只有当 rogerb 进行了更改时,代码才会运行? 你觉得怎么样?

我认为你的想法会起作用:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Environ("username")="roberb" then
If ActiveSheet.Name <> “logDetails” Then
Application.EnableEvents = False
Sheets(“LogDetails”).Range(“A” & Rows.Count).End(xlUp).Offset(1, 0).Value = ActiveSheet.Name & “-” & Target.Address(0, 0)
Sheets(“LogDetails”).Range(“A” & Rows.Count).End(xlUp).Offset(0, 1).Value = Target.Value
Sheets(“LogDetails”).Range(“A” & Rows.Count).End(xlUp).Offset(0, 2).Value = Environ(“username”)
Sheets(“LogDetails”).Range(“A” & Rows.Count).End(xlUp).Offset(0, 3).Value = Now
Sheets(“LogDetails”).Columns(“A:D”).AutoFit
Application.EnableEvents = True
End If
End If
End Sub

最新更新