VBA:有什么方法可以检测是否按了DELETE键?

时间:2020-02-29 14:36:01

标签: excel vba

是否有任何事件可以检测是否在工作表的某个单元格上按下了DELETE键?

这是我的示例代码:

Public Sub Worksheet_Selection_Change(ByVal Target As Range)
  oldValue = Target.Value
End Sub  

Private Sub Worksheet_Change(ByVal Target As Range)
  newValue = Target.Value
  If oldValue <> newValue Then "Do Somthing"
End Sub

假设A1 = 10,则选择A1并删除该值。所以newValue = NULL和oldValue = 10 然后,您立即在单元格中键入“ 20”,因此newValue = 20并且oldValue应该为NULL,但仍为“ 10”。 我需要检查是否按Delete键来更新oldValue

Private Sub Worksheet_Change(ByVal Target As Range)
  newValue = Target.Value
  If "Delete key Pressed" Then oldValue = ""
  If oldValue <> newValue Then "Do Somthing"
End Sub

2 个答案:

答案 0 :(得分:3)

您可以使用Application.OnKey将过程分配给按键。

  1. 将此代码添加到工作表模块以激活钥匙钩:
    Private Sub Worksheet_Activate()
        Application.OnKey Key:="{DEL}", Procedure:="DoSomething"
    End Sub
  1. 将此代码添加到工作表模块以停用按键挂钩:
   Private Sub Worksheet_Deactivate()
       Application.OnKey Key:="{DEL}"
   End Sub
  1. 将此代码添加到标准模块中:
    Public Sub DoSomething()
      MsgBox "Delete button pressed!"
      Selection.Clear
    End Sub

我使用

Selection.Clear命令是因为OnKey会覆盖键的标准行为。如果您不想删除单元格的内容,则将其注释掉。

答案 1 :(得分:0)

感谢所有人的帮助,我找到了一个非常简单的解决方案,不需要检查是否按了DELETE键。检查条件后,只需用newValue更新oldValue。

Public Sub Worksheet_Selection_Change(ByVal Target As Range)
  oldValue = Target.Value
End Sub  

Private Sub Worksheet_Change(ByVal Target As Range)
  newValue = Target.value
  If oldValue <> newValue Then "Do Somthing"
  oldValue = newValue ***
End Sub