2015-04-02 160 views
1

所以我需要做的几件事情,第一个是运行时按下删除键的宏,所以我发现这一点: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,所以我不知道如何结合这些使用清除功能删除:) ..任何帮助将不胜感激,谢谢。

+0

您可能希望查看worksheet_change事件,一旦您找到了,可以使用target。所以如果你删除了一个单元格,该单元格变成了目标,如果target =“”那么做一些事情。 – Davesexcel 2015-04-02 21:30:00

+0

谢谢,我已经设置了一些东西的工作,没想到尝试添加任何其他:) – Jonathan 2015-04-03 15:37:03

回答

0

OnKey调用的第二部分“Intercept”是您必须添加到常规模块中的子名称。

上模块>插入>模块

你只需要右键单击并添加像这样子:

工作表代码:

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 
+0

这很好,谢谢! 我确实必须将“Clear”更改为“ClearContents”,这样才能保持格式化,然后我只是在需要运行的代码的其余部分中添加它,它似乎正是我所需要的。 哦,我还必须将“DELETE”更改为“DEL”,否则它将无法识别我的按键。 – Jonathan 2015-04-03 14:58:31

1

设置一个有效的单元格值,您可以在模块中使用此功能:

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

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

Worksheet_Activate()Worksheet_DeactivateWorkbook的功能。在您的VBAProject中,双击ThisWorkbook并在顶部的下拉列表中将“常规”更改为“工作簿”。然后,在右侧的下拉列表中,您可以选择SheetActivateSheetDeativate。添加这些功能,并填写您的代码以禁用删除您Sheet1工作键:

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

这也很有用,谢谢。 – Jonathan 2015-04-03 15:38:58

相关问题