如何将按键事件分配给用户窗体?

How to assign keydown events to a userform?

我想要特定的键(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

更新
克里斯提到(下面)它应该以 class 命名,重新调整名称有助于修复我的表单中的其他一些小错误。但是,我 运行 遇到了一个问题,即在单击命令按钮时打开用户窗体,运行 宁或单击它会给我一个 1004 错误。

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

无论您如何命名您的用户窗体,事件始终具有名称 Userform_event,如评论之一所述。并且您必须将代码放入用户窗体的 class 模块中。在这种情况下

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

这篇 article 对用户表单进行了很好的概述和介绍