Excel VBA: 无法在拖放过程中禁用 DisplayAlert?

Excel VBA: unable to disable DisplayAlert during drag+drop?

我正在尝试捕获 VBA 中的特定拖放事件,并希望在此事件期间禁用弹出窗口 "There's already data here. Do you want to replace it?"。

我捕获了从单元格 [D1] 拖放到单元格 [E1] 的基本事件,但由于某种原因我无法禁用弹出窗口。有谁知道为什么?

非常感谢。

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Not Intersect(Target(1, 1), [D1]) Is Nothing Then
        MsgBox "selected " & Target.Address & " - " & Target(1, 1).Value
        Application.DisplayAlerts = False
    End If

End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Intersect(Target(1, 1), [E1]) Is Nothing Then
        MsgBox "changed " & Target.Address & " - " & Target(1, 1).Value
    End If

End Sub

为什么放

Application.DisplayAlerts = False

在拖放代码之后?把它移到它前面。

试试这个 - 它适用于我的 2013 Excel:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target(1, 1), [E1]) Is Nothing Then
        MsgBox "changed " & Target.Address & " - " & Target(1, 1).Value
    End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Intersect(Target(1, 1), [D1]) Is Nothing Then
        MsgBox "selected " & Target.Address & " - " & Target(1, 1).Value
        Application.AlertBeforeOverwriting = False
    Else
        Application.AlertBeforeOverwriting = True
    End If
End Sub

这使用 SelectionChange 事件捕捉用户选择 D1 并使用 Application.AlertBeforeOverwriting 禁用警报。任何其他选择确保它已启用。拖动该值会导致另一个 SelectionChange 现在重新启用任何其他覆盖的警报。

此外,您应该使用事件诱使用户点击 D1,然后更改为另一个 sheet 或关闭这个,因为警报可能会保持禁用状态。