Как вызвать функцию по клавише ENTER в Excel с помощью vba
Google должен предоставить мне достаточно примеров, но ни один из них, кажется, не работает
Что я хочу: каждый раз, когда пользователь нажимает, а затем отпускает, клавишу ENTER, чтобы моя программа сделала что-то (т. е. создайте MsgBox или вызовите функцию Foo). Я бы предпочел это в форме MWE
Что я сделал: я попытался погуглить его, но ни один из примеров не является функциональным. Они компилируются, но ничего не делают. Я также позаботился о сохранении в макросе совместимый формат Excel.
Что я использую: я использую Excel 2016, 64 бит с Office 365
Редактировать: пользователь вводит эту информацию в рабочий лист. Я хочу перехватить ввод пользователя, и каждый раз, когда он нажимает ENTER, перемещайте курсор / активную ячейку вниз на две строки, чтобы под каждой ячейкой была пустая ячейка. Если пользователь нажимает tab, я хочу взять курсор / активную ячейку справа на два столбца, поэтому справа от каждой ячейки есть пустая ячейка. ячейка.
EDIT 2: Вот MWE того, что у меня есть прямо сейчас, которое должно работать, но которое ничего не делает. Я добавляю это в рабочий лист, а не как модуль
Sub SomeActions()
MsgBox ("Hello")
End Sub
Private Sub Workbook_Open()
Application.OnKey "~", "SomeActions"
End Sub
2 ответов:
Во-первых, сделайте обратный вызов
Sub, который выполняет необходимую вам логику. Поместите его в новый модуль кода (не в код рабочего листа):Sub SomeActions() ... End SubЗатем подпишитесь на событие
OnKey, например, когда пользователь открывает книгу (этот код входит в модульThisWorkbook) в Редакторе VBA:Private Sub Workbook_Open() Application.OnKey "~", "SomeActions" End Sub
"~"значит введите ключ. Для цифровой клавиатуры используйте клавишу"{ENTER}".
Что я хочу: каждый раз, когда пользователь нажимает, а затем отпускает, клавишу ENTER, чтобы моя программа сделала что-то (т. е. создайте MsgBox или вызовите функцию Foo).
я бы предпочел это в виде MWEЕсли я правильно понял, вы хотите, чтобы пустая строка между каждым введенным пользователем значением шла вниз, а пустой столбец между каждым введенным пользователем значением шел вправо.
На листе кода рабочего листа:
Option Explicit Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Count > 1 Then Exit Sub Application.EnableEvents = False Dim r As Long, c As Long If Target.Row / 2 <> Int(Target.Row / 2) Then r = 1 If Target.Column / 2 <> Int(Target.Column / 2) Then c = 1 Target.Offset(r, c).Activate Application.EnableEvents = True End SubЭто происходит для всех навигация. Если вы хотите, чтобы это происходило только на входе, измените макрос события Worksheet_Change вместо макроса события Worksheet_SelectionChange.
Comments