2015-04-02 2 views
1

Таким образом, я необходимость делать несколько вещей, первый запустить макрос при нажатии клавиши удаления, так что я нашел это:Excel VBA Очистить активный Cell

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, поэтому я не знаю, как их объединить, чтобы использовать функцию clear при удалении :). Любая помощь была бы весьма признательна, спасибо.

+0

Возможно, вам захочется проверить событие workheet_change, как только вы это выяснили, вы можете использовать цель. Поэтому, если вы удалите ячейку, эта ячейка станет целевой, и если target = "", то сделайте что-нибудь. – Davesexcel

+0

Спасибо, у меня уже есть кое-что настроенное для работы с этим, не думал, чтобы попробовать добавить что-нибудь еще :) – Jonathan

ответ

0

Вторая часть вызова OnKey «Intercept» - это название суб, которое вы должны добавить в обычный модуль.

вы просто должны щелкнуть правой кнопкой мыши на Modules> Вставить> модуль и добавить к югу, как это:

Рабочий лист Код:

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

Это отлично поработало, спасибо! Мне пришлось изменить «Очистить» на «ClearContents», чтобы сохранить форматирование, а затем я добавил в остальную часть кода, который мне нужно было запустить, и он, похоже, делает именно то, что мне нужно. О, я также должен был изменить «DELETE» на «DEL», иначе он не узнал бы мое нажатие. – Jonathan

1

Чтобы установить значение активной ячейки, вы можете использовать эту функцию в своем модуле:

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

или вы можете использовать свой код из OP.

Worksheet_Activate() и Worksheet_DeactivateWorkbook функции. В своем VBAProject дважды щелкните ThisWorkbook и смените «General» на «Workbook» в раскрывающемся списке сверху. Затем в раскрывающемся списке справа вы можете выбрать SheetActivate и SheetDeativate. Добавьте эти функции и заполнить с вашим кодом, чтобы отключить DELETE клавиши на 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, укажите "" как 2-ой аргумент OnKey. И только передайте имя ключа без 2-го аргумента, чтобы разрешить обработку (см. MSDN reference).

P.S. Это может произойти только после переключения на рабочий лист.

+1

Это также полезно, спасибо. – Jonathan

Смежные вопросы