代码已更新以引用以下更改。
该日志系统为 Excel 创建一个名为 Log.txt 的外部文档,它将在 log.txt 文件中创建一行,如下所示:
11:27:20 AM Matthew Ridge 将单元格 $N$55 从 ss 更改为
这不会告诉您是否有人在工作表中输入了新的代码行,但如果代码需要答案,它会告诉您答案位于哪个单元格中。下面的代码应该同时适用于 Mac 和 PC 系统。如果人们发现它,请不要说。
该代码是在此处人员和其他形式的帮助下创建的,因此我不能独占该文档的所有权,但我可以拥有该概念的所有权。因此,感谢那些提供帮助的人,如果没有这个,我认为现在就不会有可行的 Excel 日志系统;)
顺便说一句,在有人惊慌失措并询问这段代码去哪里之前,它对于一般/新的最终用户来说并不明显。您需要前往开发者选项卡打开它,单击 Visual Basic,当新窗口打开时查找 Microsoft Excel 对象;该文件夹下应该是您的工作簿。您可以将其放在 ThisWorkbook 下,也可以通过双击您想要将代码放入其中的工作表来将其放在任何工作表中。
在右侧面板上打开工作表后,您将看到 Option Explicit,如果没有看到,最好通过确保需要变量声明已检查。再次在 Visual Basic 窗口中找到它,然后按照以下路径操作:
Tools-> Options -> Editor.
如果检查过,那么您就不用担心,如果没有检查过,那么您就检查一下。 Option Explicit 对于您的代码来说是一件好事,它迫使您声明变量,这是一个很好的做法。
验证后,您可以复制下面的代码,将其粘贴到您的工作簿中,或根据您的需要粘贴到特定工作表中。
2.01版
Option Explicit
Dim PreviousValue
Private Sub Worksheet_Change(ByVal Target As Range)
Dim sLogFileName As String, nFileNum As Long, sLogMessage As String
sLogFileName = ThisWorkbook.Path & Application.PathSeparator & "Log.txt"
On Error Resume Next ' Turn on error handling
If Target.Value <> PreviousValue Then
' Check if we have an error
If Err.Number = 13 Then
PreviousValue = 0
End If
' Turn off error handling
On Error GoTo 0
sLogMessage = Now & Application.UserName & " changed cell " & Target.Address _
& " from " & PreviousValue & " to " & Target.Value
nFileNum = FreeFile ' next file number
Open sLogFileName For Append As #nFileNum ' create the file if it doesn't exist
Print #nFileNum, sLogMessage ' append information
Close #nFileNum ' close the file
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
PreviousValue = Target(1).Value
End Sub
随着时间的推移,我将尝试更新此代码以添加更多我认为合适的功能。
再次感谢所有提供帮助的人,非常感谢使这一切成为可能。