VBA: Есть ли способ определить, нажата ли клавиша DELETE? - PullRequest
0 голосов
/ 29 февраля 2020

Есть ли какое-либо событие, чтобы определить, нажата ли клавиша 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 ]

3 голосов
/ 01 марта 2020

Вы можете использовать Application.OnKey для назначения процедуры клавишам.

  1. Добавьте этот код в модуль листа, чтобы активировать перехват ключа:
    Private Sub Worksheet_Activate()
        Application.OnKey Key:="{DEL}", Procedure:="DoSomething"
    End Sub
Добавьте этот код в модуль листа, чтобы деактивировать перехват ключа:
   Private Sub Worksheet_Deactivate()
       Application.OnKey Key:="{DEL}"
   End Sub
Добавьте этот код в стандартный модуль:
    Public Sub DoSomething()
      MsgBox "Delete button pressed!"
      Selection.Clear
    End Sub

Selection.Clear Я использую команду, потому что OnKey перезаписывает стандартное поведение ключа. Если вы не хотите удалять содержимое ячеек, закомментируйте его.

0 голосов
/ 01 марта 2020

Благодаря помощи All, я нашел действительно простое решение моей проблемы, и ему не нужно проверять, нажата ли клавиша DELETE. Просто нужно обновить oldValue на newValue после проверки условия.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...