gpt4 book ai didi

events - 如何使用Excel VBA制作外部日志?

转载 作者:行者123 更新时间:2023-12-01 19:50:00 28 4
gpt4 key购买 nike

代码已更新以引用以下更改。

此日志系统为 Excel 创建一个名为 Log.txt 的外部文档,它将在 log.txt 文件中创建一行,如下所示:

11:27:20 AM Matthew Ridge changed cell $N$55 from ss to

这不会告诉您是否有人在工作表中输入了新的代码行,但如果代码需要答案,它会告诉您答案位于哪个单元格中。下面的代码应该适用于 Mac 和 PC 系统合并。如果人们发现它,请不要说。

此代码是在此处人员和其他形式的帮助下创建的,因此我不能独占该文档,但我可以拥有该概念的所有权。因此,感谢那些提供帮助的人,如果没有这个,我认为现在就不会有可行的 Excel 日志系统;)

顺便说一句,在有人 panic 并询问这段代码去哪里之前,它对于一般/新的最终用户来说并不明显。您需要转到Developer Tab 打开它,单击“Visual Basic”,当新窗口打开时,查找“Microsoft Excel 对象”;该文件夹下应该是您的工作簿。您可以将其放在 ThisWorkbook 下,也可以通过双击您想要将代码放入其中的工作表来将其放在任何工作表内。

在右侧面板上打开工作表后,您将看到“选项显式”,如果没有看到,最好通过确保选中需要变量声明来激活它。再次在 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

随着时间的推移,我将尝试更新此代码以添加更多我认为合适的功能。

再次感谢所有提供帮助的人,非常感谢使这一切成为可能。

最佳答案

问题是,当您输入合并单元格时,放入 PreviousValue(在 Worksheet_SelectionChange 中)的值是所有合并单元格的数组,您无法将其与新的值(value)。当在编辑时触发 Worksheet_Change 时,目标只是合并区域的左上角单元格。因此,让我们跟踪该单元格的合并范围。将您的 Worksheet_SelectionChange 替换为以下内容:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
PreviousValue = Target(1).Value
End Sub

免责声明:这是在 Excel for Mac 2011 上进行测试的,因为我目前无法访问 Excel for Windows,但我非常确定它也适用于 Excel for Windows。

关于events - 如何使用Excel VBA制作外部日志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10403517/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com