2015-04-02 231 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