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 或关闭这个,因为警报可能会保持禁用状态。
我正在尝试捕获 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 或关闭这个,因为警报可能会保持禁用状态。