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=EnterTextBox
和 Logincode_Click = CommandButton1_Click
在我的示例中。我会错过什么?
@Mertinc 我建议您提出自己的问题 :) 如果您提出一个好问题并包含您尝试使用的代码,它会更容易为您提供帮助。任何人都不太可能对 3 年前对他人问题的回答做出回应!
+1,旁注:KeyPress 在 Access 中有效,但在 Excel 中无效 mrexcel.com/forum/excel-questions/…
而不是神秘的KeyCode = 13
使用KeyCode = KeyCodeConstants.vbKeyReturn
。这使得在代码中哪个按钮触发该代码清楚。另外,在搜索按钮时,您可以输入KeyCodeConstants.
,智能感知会显示所有可用按钮的列表。 @drognisep 发布了类似的答案。【参考方案2】:
请务必尽可能避免使用“幻数”,方法是定义您自己的常量,或者使用内置的 vbXXX 常量。
在这种情况下,我们可以使用 vbKeyReturn 来指示回车键的键码(替换 YourInputControl 和 SubToBeCalled)。
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 用户窗体中按下按钮的主要内容,如果未能解决你的问题,请参考以下文章