Excel 在另一个文本框的选项卡上设置用户窗体文本框的焦点
我在Excel中有一个用户表单。它有6个文本框,它们是Userform上TabStop设置为True的唯一控件 我可以在文本框中进行制表和移动。我无法使Excel 在另一个文本框的选项卡上设置用户窗体文本框的焦点,excel,vba,userform,Excel,Vba,Userform,我在Excel中有一个用户表单。它有6个文本框,它们是Userform上TabStop设置为True的唯一控件 我可以在文本框中进行制表和移动。我无法使SetFocus处理在文本框之间移动时触发的事件。我可以使用Userform16.Textbox1.Setfocus在userform上放置一个CommandButton,它可以按预期将焦点移动到Textbox1 我设置了一个简单的测试事件(见下文),以便在输入Textbox2时将textbox焦点移回TextBox1。当我从TextBox1中取
SetFocus
处理在文本框之间移动时触发的事件。我可以使用Userform16.Textbox1.Setfocus
在userform上放置一个CommandButton,它可以按预期将焦点移动到Textbox1
我设置了一个简单的测试事件(见下文),以便在输入Textbox2时将textbox焦点移回TextBox1。当我从TextBox1中取出标签时,它会将焦点移到Textbox3
Private Sub TextBox2_Enter()
Cancel = True
UserForm16.TextBox1.SetFocus
End Sub
通过在上面设置停止
,我可以看到事件按预期触发,但它不允许我控制下一个控件的焦点
无论是否使用sub中的Cancel=True
语句,我都会得到相同的结果
我设置了一个简单的测试事件(见下文),在输入Textbox2时将textbox焦点移回TextBox1,当我从TextBox1中取出标签时,它实际上将焦点移回Textbox3
Private Sub TextBox2_Enter()
Cancel = True
UserForm16.TextBox1.SetFocus
End Sub
无法在\u Enter()
事件中将焦点设置为另一个控件。如果您尝试这样做,代码将把焦点移动到下一个TabIndex
TextBox1 (TabIndex 0)
TextBox2 (TabIndex 1)
TextBox3 (TabIndex 3)
TextBox4 (TabIndex 4)
TextBox5 (TabIndex 2)
比如说
假设您有5个文本框,其中包含以下TabIndex
TextBox1 (TabIndex 0)
TextBox2 (TabIndex 1)
TextBox3 (TabIndex 3)
TextBox4 (TabIndex 4)
TextBox5 (TabIndex 2)
现在如果你有这个代码
Private Sub TextBox2_Enter()
TextBox3.SetFocus
End Sub
从TextBox1
按TAB键时,焦点将移到TextBox5
(而不是TextBox3
),因为它有下一个TabIndex
而且Cancel=True
也不会有任何效果,因为它不是\u Enter()
的参数,就像它是sayPrivate Sub TextBox2\u Exit(ByVal Cancel作为MSForms.ReturnBoolean)
编辑
顺便说一句,在您的场景中,只有当表单中只有两个
文本框时,焦点才会回到Textbox1
。我知道这是旧的,但这回答了我的问题,我无法评论。然而,Stan关于您在2017年6月8日发表的评论,我相信您正在寻找下面的代码,当您使用Cancel=True时,该代码将突出显示文本框中的文本。我在文本框退出事件中使用它。这将向用户指示已选择文本框
With Me.TextBox1
.Value = "Full Name"
.SelStart = 0
.SelLength = Len(.Text)
.SetFocus
End With
Cancel = True
虽然\u Enter()
事件确实无法处理.SetFocus
,但\u KeyDown()
事件可以!这是一个很好的解决方法,你只需要监视TAB键是否被按下
因此,代码看起来很类似,TextBox1是您离开的代码,TB2是您输入的代码
Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 9 Then TextBox1.SetFocus 'where 9 is the KeyCode for the TAB button
End Sub
如果目的是在离开前验证TextBox1
中的数据,为什么不在TextBox1\u Exit
中处理它,方法是设置Cancel=True
?Cancel=True不会有任何效果,因为它不是事件中的参数。我似乎记得在输入事件中更改焦点是不起作用的,所以您可能想考虑尝试另一个事件。我要做的是在离开下一个文本框时验证文本框中的日期,但是如果失败,则编辑将焦点返回到原文本框,并突出显示该文本框中的数据。如上所述,我可以使用Cancel=True将焦点放在原始文本框上,但不会向用户显示此文本框已被选中。谢谢