Как вызвать функцию по клавише 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
1001   2  

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

    Ничего не найдено.