Чтобы зафиксировать нажатие определенной клавиши, вам нужен метод OnKey
:
Application.OnKey "~", "myMacro" ' for the regular enter key
' or if you want Enter from the numeric keypad:
' Application.OnKey "{ENTER}", "myMacro"
' Below I'll just assume you want the latter.
Выше указано, что myMacro
должен выполняться при нажатии клавиши Enter . Метод OnKey
нужно вызывать только один раз. Вы можете поместить это в событие Workbook_Open
:
Private Sub Workbook_Open()
Application.OnKey "{ENTER}", "myMacro"
End Sub
Чтобы прекратить ввод ключа Введите ,
Application.OnKey "{ENTER}"
Чтобы проверить, была ли нажата Enter в ячейке A1, вы можете сделать следующее:
Sub myMacro()
If Not Intersect(Selection, Range("A1")) Is Nothing Then
' equivalent to but more flexible and robust than
'If Selection.Address = "$A$1" Then
MsgBox "You pressed Enter while on cell A1."
End If
End Sub
Теперь, чтобы определить, была ли нажата Enter в определенной ячейке , только если эта ячейка была отредактирована , мы должны быть немного умны. Допустим, вы редактируете значение ячейки и нажимаете Enter. Первое, что запускается, это макрос OnKey
, а после этого запускается событие Worksheet_Change
. Поэтому сначала нужно «сохранить результаты» OnKey
, а затем обработать событие Worksheet_Change
на основе этих результатов.
Инициировать OnKey
так: Application.OnKey "{ENTER}", "recordEnterKeypress"
В вашем кодовом модуле у вас будет это:
Public enterWasPressed As Boolean
Sub recordEnterKeypress()
enterWasPressed = True
End Sub
Редактирование ячейки будет зафиксировано событием Worksheet_Change
:
Private Sub Worksheet_Change(ByVal Target As Range)
If enterWasPressed _
And Not Intersect(Target, Range("A1")) Is Nothing Then
MsgBox "You just modified cell A1 and pressed Enter."
End If
enterWasPressed = False 'reset it
End Sub
Теперь приведенный выше код выполняет то, что вы задаете в вопросе, но я хотел бы повторить: ваш вопрос звучит ужасно, как XY проблема . Почему вы хотите обнаружить нажатие клавиши Enter ? Дайте нам знать, и, возможно, мы сможем предложить альтернативы.