使用 Esc 关闭用户窗体,每个控件不使用 control_KeyPress() 命令

Close userform with Esc without control_KeyPress() command for each control

在这个答案中,表明 Excel 用户窗体可以通过为每个可以获取焦点的控件设置一个 control_KeyPress() sub 来使用 Esc 关闭 - Close userform with escape button

我已经让它工作了,但是我有几个菜单,每个菜单都有一些控件。我试着把这个例程放在一个按钮上,但它并不总是很快 tab/nav 返回到特定按钮。

我正在寻找制作它的方法,这样我要么

  1. 不必为每个可以获取焦点的控件创建 control_KeyPress() 子
  2. 或者,可以以不同的方式实现相同的目标(使用 esc 关闭用户窗体)

谢谢!

我的想法是在窗体上创建一个命令按钮,将取消 属性 设置为 true 并将宽度和高度设置为 0。将以下代码添加到不可见按钮。

Private Sub CommandButton1_Click()
    Hide
End Sub

保持可见 属性 为 true

创建一个小按钮,例如6 x 6 以便它可见但不显眼地位于表单的一个角中。让它变小会阻止显示标题,只留下一个整洁的小方块。

创建一个按钮(例如 BTXX),并设置:

  • Cancel = True 这样按退出键"presses"这个按钮
  • TabStop = False 以便在表单中使用 Tab 键不会在按钮上停止
  • 标题 = "Esc" 提醒按钮的用途

在onclick事件中使用:

Private Sub BTXX_Click()
    Unload Me
End Sub

在此示例中,通过设置 Top=0 和 Left=0,退出按钮在表单上为 "hidden" top-left。 (见下图)。

Userform Properties

如果您已经有一个用于关闭用户窗体的按钮,那么您只需将其取消 属性 设置为 true。然后通过按 escape 键触发它,保持可点击状态,保持其加速器并保持 Tab 键顺序。您只能有 1 个带有 Cancel=True 的按钮,属性 编辑器会自动处理此问题。