Excel VBA清除活动单元格

时间:2015-04-02 21:20:27

标签: excel vba excel-vba

所以我需要做一些事情,第一个是按下删除键时运行一个宏,所以我发现了这个:

Private Sub Worksheet_Activate()
Application.OnKey "{DELETE}", "Intercept"
End Sub

Private Sub Worksheet_Deactivate()
Application.OnKey "{DELETE}"
End Sub

现在根据我读到的内容,这将使删除键无效,所以我还需要它同时清除当前活动的单元格,我发现了这个:

Sub SetValue()
Worksheets("Sheet1").Activate
ActiveCell.Value = 35
End Sub

和此:

Selection.Clear

但是,我是VBA的新手,所以我真的不知道如何将这些结合起来使用删除:)上的清除功能..任何帮助将不胜感激,谢谢。

2 个答案:

答案 0 :(得分:1)

要设置活动单元格值,可以在模块中使用此功能:

Sub SetValue()
  ActiveCell = Null ' to clear the contents
End Sub

或者您可以使用OP中的代码。

Worksheet_Activate()Worksheet_DeactivateWorkbook个函数。在您的VBAProject中,双击ThisWorkbook并更改" General"到"工作簿"在下拉列表中。然后,在右侧的下拉列表中,您可以选择SheetActivateSheetDeativate。添加这些功能并填写代码以禁用Sheet1工作表上的 DELETE 键:

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
   If Sh.Name = "Sheet1" Then Application.OnKey "{DELETE}", "SetValue"
End Sub

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
' This will enable DELETE
  If Sh.Name = "Sheet1" Then Application.OnKey "{DELETE}"
End Sub

要在按下DELETE时禁用任何处理,请将""指定为OnKey的第二个参数。并且只传递没有第二个参数的键名来启用处理(参见MSDN reference)。

P.S。这可能仅在切换到正在处理的工作表之后才会触发。

答案 1 :(得分:0)

OnKey呼叫的第二部分"拦截"是您必须在常规模块中添加的子名称。

您只需右键单击模块>插入>模块并添加像这样的子:

工作表代码:

Private Sub Worksheet_Activate()
    Application.OnKey "{DELETE}", "deleteAction"
End Sub

Private Sub Worksheet_Deactivate()
    Application.OnKey "{DELETE}"
End Sub

模块代码:

Sub deleteAction()
    Selection.Clear
    [... the few things you have to do :) ...]
End Sub