EnterKey 在 VBA 用户窗体中按下按钮

Posted

技术标签:

【中文标题】EnterKey 在 VBA 用户窗体中按下按钮【英文标题】:EnterKey to press button in VBA Userform 【发布时间】:2013-10-01 20:24:44 【问题描述】:

我在 Excel 中有一个用户表单,要求输入用户名和密码。输入密码后,如果按 Enter,它只会“选择”下一个项目,即 LogIn 按钮,但不会按下它。您必须再次按 Enter 才能真正按下按钮。

我怎样才能做到这一点,当用户在他的键盘上按下回车键时,登录按钮被按下并且关联的代码运行(Logincode_click)?

【问题讨论】:

这是***.com/questions/22792836/… 的副本(另一个的答案比其中任何一个都好) Press enter in textbox and execute button function in VBA的可能重复 【参考方案1】:

您还可以使用 TextBox 的 On Key Press 事件处理程序:

'Keycode for "Enter" is 13
Private Sub TextBox1_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = 13 Then
         Logincode_Click
    End If
End Sub

Textbox1 就是一个例子。确保选择要引用的文本框,并且 Logincode_Click 是您使用此代码调用(运行)的示例子。确保您参考您的首选子

【讨论】:

+1。这可能比我的答案更好或更精确,这也会在Tab 键上触发事件,或者在文本框中单击鼠标。 @DavidZemens,我得到了 Compile error: Procedure declaration does not match description of event or procedure having the same name 但我确定我没有另一个 EnterTextBox 命名过程。 TextBox1=EnterTextBoxLogincode_Click = CommandButton1_Click 在我的示例中。我会错过什么? @Mertinc 我建议您提出自己的问题 :) 如果您提出一个好问题并包含您尝试使用的代码,它会更容易为您提供帮助。任何人都不太可能对 3 年前对他人问题的回答做出回应! +1,旁注:KeyPress 在 Access 中有效,但在 Excel 中无效 mrexcel.com/forum/excel-questions/… 而不是神秘的KeyCode = 13 使用KeyCode = KeyCodeConstants.vbKeyReturn。这使得在代码中哪个按钮触发该代码清楚。另外,在搜索按钮时,您可以输入KeyCodeConstants.,智能感知会显示所有可用按钮的列表。 @drognisep 发布了类似的答案。【参考方案2】:

请务必尽可能避免使用“幻数”,方法是定义您自己的常量,或者使用内置的 vbXXX 常量。

在这种情况下,我们可以使用 vbKeyReturn 来指示回车键的键码(替换 YourInputControlSubToBeCalled)。

   Private Sub YourInputControl_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
        If KeyCode = vbKeyReturn Then
             SubToBeCalled
        End If
   End Sub

这可以防止一整类兼容性问题和简单的拼写错误,尤其是因为 VBA 为我们将标识符大写。

干杯!

【讨论】:

+1 用于使用内置常量而不是神秘数字。此外,如果您要查找特定按钮的键码,您可以输入 KeyCodeConstants.,智能感知会显示所有按钮的键码下拉列表。 我在没有使用 VBA 编辑器为我填充的 ​​ByVal 行的情况下遇到错误。同样,我喜欢在 rec 中使用 vbXXX 常量。 vbKeyEscape 这是其他人的名单! docs.microsoft.com/en-us/office/vba/language/reference/… 另外值得注意的是,我可以将KeyUp 用于vbKeyEscape,但不能用于vbKeyReturn。虽然两者都使用KeyDown。在那里我只会使用KeyDown 继续前进。【参考方案3】:

这个对我有用

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
        If KeyCode = 13 Then
             Button1_Click
        End If
End Sub

【讨论】:

【参考方案4】:

在@Penn 的评论的基础上,如果链接中断,您还可以通过将按钮的Default 属性设置为True 来实现此目的(您可以在属性窗口中进行设置,通过点击F4)

这样,每当 Return 被点击时,VBA 就会知道激活按钮的单击事件。同样,将按钮的Cancel 属性设置为True 将导致该按钮的单击事件在按下 ESC 键时运行(对于优雅地退出用户窗体很有用)


来源:Olivier Jacot-Descombes 的答案可在此处访问 https://***.com/a/22793040/6609896

【讨论】:

【参考方案5】:

使用 TextBox 的 Exit 事件处理程序:

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Logincode_Click  
End Sub

【讨论】:

这似乎不起作用。我应该把这段代码放在哪里。在用户表单的模块中? 是的,这在用户窗体的模块中,并确保子名称TextBox1_Exit 对应于您的文本框的名称。所以,如果你的文本框被称为MyTextBox,那么它应该是Private Sub MyTextBox_Exit(... 但我认为 Jacob 下面的回答比我的更准确。用户窗体模块中子例程的命名和放置同样需要注意。 我得到一个编译错误:过程声明与具有相同名称的事件或过程的描述不匹配。它突出显示了第一行:“Private Sub pwBox_KeyDown(KeyCode As Integer, Shift As Integer)” pwBox 是他们输入密码的文本框的名称。这就是普通人在写完密码后只需按 Enter 键的地方,因此代码应该运行。知道为什么这不能编译吗? 如果你使用@Jacob D 的答案,我建议你问他:)【参考方案6】:

这里你可以简单地使用:

SendKeys "ENTER" 在链接到用户名字段的代码末尾。

因此您可以跳过按一次 ENTER 键(一次)。 结果,将激活下一个按钮(此处为“登录”按钮)。当您按一次 ENTER(您想要的结果)时,它将运行与“登录”按钮链接的代码。

【讨论】:

以上是关于EnterKey 在 VBA 用户窗体中按下按钮的主要内容,如果未能解决你的问题,请参考以下文章

Excel 崩溃,VBA 用户窗体无法保存

如何在 C# 中按下停止按钮来停止耗时过长的 UI 线程 [关闭]

更改在 UITableview 中按下的特定按钮的图像

当用户在swift中按下注销按钮时如何停止更新位置

下一个按钮用户窗体 Excel VBA

swift 3 在tableView 中按下了哪个单元格按钮