VBA имеет пользовательскую форму и пытается назначить события нажатия клавиш, но не отвечает - PullRequest
1 голос
/ 06 ноября 2019

Я хочу иметь определенные ключи (Enter, Right Arrow, Esc) для выполнения различных процедур. У меня есть следующий код, но ничего не работает. Я попытался установить KeyPreview = True, но это ничего не изменило.

Sub UserForm1_KeyDown(ByVal KeyAscii As MSForms.ReturnInteger, ByVal Shift As Integer)
    Select Case KeyAscii
        Case 13 'enter key
            addBtn_Click
        Case 39 'right arrow
            skipBtn_Click
        Case 27 'escape key
            exitBtn_Click
        Case Else
    End Select
End Sub

ОБНОВЛЕНИЕ Крис упомянул (ниже), что он должен быть назван в честь класса, перенастройка имен помогла исправить некоторые другие небольшие ошибки в моей форме. Однако теперь у меня возникла проблема с тем, что пользовательская форма открывалась при щелчке, запуске или щелчке по командной кнопке, и это приводит к ошибке 1004.

Private Sub blocksSorter_Click()
     Load UserForm1
     UserForm1.Show
End Sub

1 Ответ

0 голосов
/ 06 ноября 2019

Неважно, как вы называете свою пользовательскую форму, событие всегда имеет имя Userform_event, как сказано в одном из комментариев. И вы должны поместить код в модуль класса пользовательской формы. В этом случае

Sub UserForm_KeyDown(ByVal KeyAscii As MSForms.ReturnInteger, ByVal Shift As Integer)
    Select Case KeyAscii
        Case 13 'enter key
            addBtn_Click
        Case 39 'right arrow
            skipBtn_Click
        Case 27 'escape key
            exitBtn_Click
        Case Else
    End Select
End Sub

Эта статья дает довольно хороший обзор и введение в пользовательские формы

...