Workbook_SheetChange事件在不应触发的时间触发两次

时间:2019-10-11 13:04:10

标签: excel vba

下面使用了一段时间的代码不再起作用。

我在没有其他代码的情况下在新工作表中进行了测试,结果相同。

我们最近已移至Office 365,我当前的Excel版本是1902。
不幸的是,这里的每个人现在都有相同的版本,因此我无法在较旧的版本上进行测试。
我之所以这样提,是因为我什么也没想,这是由于一个新的错误引起的?

编辑:我应该补充一点,这是用来防止(重新)移动行或列。

编辑:不起作用:每次触发两次。(我在几次编辑后都忽略了这一重要部分)

Private Sub Workbook_SheetChange(ByVal wks As Object, ByVal Target As Range)

    If ((Target.Address = Target.EntireRow.Address Or _
    Target.Address = Target.EntireColumn.Address)) Then

        With Application
            .EnableEvents = False
            .Undo
            .EnableEvents = True
            MsgBox "Do not modify the structure.", vbExclamation, "Notice"
        End With

    End If

End Sub

1 个答案:

答案 0 :(得分:1)

您可以尝试将其变成SelectionChange事件

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

    If ((Target.Address = Target.EntireRow.Address Or _
    Target.Address = Target.EntireColumn.Address)) Then

        With Application
            .EnableEvents = False
            Target.Cells(1, 1).Select
            .EnableEvents = True
        End With
        MsgBox "Do not modify the structure.", vbExclamation, "Notice"

    End If

End Sub

这将使您免受Undo的使用及其所有后果的影响