用于更新“更改日期”的Excel宏使Excel崩溃

用于更新“更改日期”的Excel宏使Excel崩溃,excel,vba,Excel,Vba,我有一个文件,其中有多个表,字段为Last change:。如果对该表进行了任何更改,则该字段应更新为当前日期 我实现了一个宏,它做了它应该做的,但不幸的是它禁用了反向Strg+Z函数,这是非常恼人的。因此,我编辑了宏,使反转功能可以再次工作。我的宏现在如下所示: Option Explicit Public Merker Private Sub Worksheet_Change(ByVal Target As Range) If Not ThisWorkbook.ReadOnly T

我有一个文件,其中有多个表,字段为Last change:。如果对该表进行了任何更改,则该字段应更新为当前日期

我实现了一个宏,它做了它应该做的,但不幸的是它禁用了反向Strg+Z函数,这是非常恼人的。因此,我编辑了宏,使反转功能可以再次工作。我的宏现在如下所示:

Option Explicit
Public Merker

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not ThisWorkbook.ReadOnly Then
        Application.OnUndo "Rev. Change", "Wiederherstellen"
        Merker = Cells(3, 2)
        Cells(3, 2) = Date
    End If
End Sub

Sub Wiederherstellen()
    Cells(3, 2) = Merker
End Sub
应用此宏时,只要对文档进行更改,Excel就会崩溃。 我的代码中有无效的东西吗?我真的很奇怪,因为没有错误消息或错误行为,只有应用程序崩溃。每次事故都会可靠地发生


谢谢你的帮助

您的事件可能会在无限循环中调用自身。尝试禁用事件以停止代码在此行Cells3,2=Date上重新调用自身


您的事件很可能在无限循环中调用自身。尝试禁用事件以停止代码在此行Cells3,2=Date上重新调用自身


@Remou我理解你为什么重新标记这个,这在技术上是正确的,但是如果这个被广泛采用,很少有问题会保留标记。这可能意味着这个标签应该被剔除。尽管如此,Office应用程序可以自动完成Office系列的其他部分,这是一个值得关注的问题。谢谢您的评论。同意。@Remou我理解你为什么重新标记这个,这在技术上是正确的,但是如果这个被广泛采用,很少有问题会保留标记。这可能意味着这个标签应该被剔除。尽管如此,Office应用程序可以自动完成Office系列的其他部分,这是一个值得关注的问题。谢谢您的评论。同意。
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not ThisWorkbook.ReadOnly Then
    Application.EnableEvents = False
        Application.OnUndo "Rev. Change", "Wiederherstellen"
        Merker = Cells(3, 2)
        Cells(3, 2) = Date
    Application.EnableEvents = True
    End If
End Sub