代码已更新以引用以下更改。
此日志系统为 Excel 创建一个名为 Log.txt 的外部文档,它将在 log.txt 文件中创建如下所示的一行:
上午 11:27:20 Matthew Ridge 将单元格 $N$55 从 ss 更改为
这不会告诉您是否有人在工作表中输入了新的代码行,但如果代码需要答案,它会告诉您该答案在哪个单元格中。下面的代码应该适用于 Mac 和 PC 系统的组合。如果人们发现它不请说。
此代码是在此处的人员和其他形式的帮助下创建的,因此我不能独资拥有该文档,但我可以拥有该概念的所有权。所以感谢那些提供帮助的人,如果没有这个,我认为现在就不会有一个可行的 Excel 日志记录系统;)
顺便说一句,在任何人惊慌失措并询问这段代码去哪里之前,这对普通/新的最终用户来说并不明显。你需要去开发者标签打开它,点击Visual Basic,当新窗口打开时寻找Microsoft Excel对象;该文件夹下应该是您的工作簿。您可以通过双击您希望代码所在的工作表将其放在 ThisWorkbook 下或任何工作表内。
在右侧面板上打开工作表后,您将看到 Option Explicit,如果您不这样做,最好通过确保选中Require Variable Declaration来激活它。这又可以在 Visual Basic 窗口中找到,并遵循以下路径:
工具->选项->编辑器。
如果它被检查,那么你不用担心,如果没有,那么你检查它。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
随着时间的推移,我将尝试更新此代码以添加更多我认为合适的功能。
再次感谢所有帮助,非常感谢使这成为可能。