【问题标题】:Excel Userform - Return Focus to ComboBox after hitting enterExcel 用户表单 - 按 Enter 后将焦点返回到 ComboBox
【发布时间】:2015-12-22 19:16:00
【问题描述】:

我试过这个:

Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = vbKeyReturn Then
         Me.ComboBox1.SetFocus
         Show_Information_Click
    End If
End Sub

不幸的是,当我按下回车键时,“焦点”从 ComboBox1 转移到了一个命令按钮,我将其用作表单的“返回”按钮。

我的 ComboBox1 采用用户输入名称(谢天谢地,它会自动完成)。该人按下回车键,其正下方的按钮(可以改为单击)激活。当按钮完成后,我的表单上的“返回”按钮现在是“焦点”,因此如果该人再次点击输入,它会使用“返回”按钮。我想将焦点设置回 ComboBox1,以便当用户按 Enter 键时,它会运行代码并将焦点返回给 ComboBox1,以便他们可以在需要时键入另一个名称并再次访问。

我什至尝试将 Me.ComboBox1.SetFocus 放在 CommandButton 事件序列的末尾,并且“返回”按钮仍处于选中状态。

谢谢!

【问题讨论】:

  • 你贴的代码在Show_Information_Click之前有Me.ComboBox1.SetFocus,你试过了吗?
  • 另外,为避免焦点发生任何变化,您的情况是否允许您将 Show_Information_Click 代码封装在第三个 Sub 中,可能是 Show_Information_Inner,并从 Show_Information_Click 和 @ 调用该 sub 987654327@?

标签: excel vba combobox focus userform


【解决方案1】:

SetFocus 不是要走的路,因为无论如何,框架会在你的例程执行之后改变焦点。相反,您可以取消键的效果,以便焦点不会改变,如下所示:

Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = vbKeyReturn Then
         KeyCode = 0
         'Whatever other code that does not affect the focus again...
    End If
End Sub

【讨论】:

  • 谢谢!这将派上用场,我已经在另一个表格上为该项目排队!但是,我需要运行 Show_Information_Click 以使 Userform 工作,因为这就是在它的各个位置填充信息的内容。我没有看到使用上面代码运行的程序???
  • +1。这是在 Excel 2016 中实际工作的唯一解决方案,如果您想解决各种按键后失去焦点的问题,例如向下箭头和输入,并且您在用户窗体中有多个组合框,并且 tabstop 属性设置为 true。我在这里尝试了所有建议的解决方案,但无济于事 [stackoverflow.com/questions/15442620/…
【解决方案2】:

查看tab order 和制表位属性,它们可能会对您有所帮助(除非您想使用多个控件,并且想使用制表键在它们之间移动)。

例如,您可以将表单上除 ComboBox 之外的每个控件的制表位属性设置为 False。这样,敲回车后,焦点立即返回那里。

您可以在属性窗口中设置这些,无需使用代码(当然您也可以从代码中设置它们)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-28
    • 1970-01-01
    • 1970-01-01
    • 2015-09-27
    • 1970-01-01
    相关资源
    最近更新 更多