在另一个文本框的标签上设置焦点在UserForm文本框上

时间:2017-06-08 15:37:47

标签: excel vba userform

我在Excel中有一个Userform。它有6个文本框,它们是Userform上唯一的控件,TabStop设置为True。

我可以选中并移动文本框。我无法让SetFocus处理在文本框之间移动时触发的事件。我可以使用Userform16.Textbox1.Setfocus在用户窗体上放置一个CommandButton,它可以按预期方式将焦点移动到Textbox1。

我设置了一个简单的测试事件(见下文),在输入Textbox2时将文本框焦点移回TextBox1。当我从TextBox1中跳出时,它将焦点移动到Textbox3。

Private Sub TextBox2_Enter()
   Cancel = True
   UserForm16.TextBox1.SetFocus
End Sub

通过在上面添加Stop,我可以看到事件按预期触发,但它不允许我控制下一个控件的焦点。

无论是否有Cancel = True语句,我都会得到相同的结果。

3 个答案:

答案 0 :(得分:1)

  

我设置了一个简单的测试事件(见下文),当输入Textbox2时,将文本框焦点移回TextBox1,当我从TextBox1中跳出时,它实际上将焦点移动到Textbox3。

您无法将焦点设置为_Enter()事件中的其他控件。如果您尝试然后代码将焦点移动到具有下一个TabIndex

的控件

例如

假设您有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也不会产生任何影响,因为它不是_Enter()的论据,就像Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)

一样

修改

顺便说一句,在您的方案中,焦点将回到Textbox1的唯一时间是表单中只有两个TextBoxes

答案 1 :(得分:0)

我知道这很旧,但这回答了我的问题,我无法发表评论。但是,Stan在2017年6月8日提到您的评论时,我相信您正在寻找类似下面的代码的内容,当在Cancel = True的情况下使用该代码时,它将突出显示文本框中的文本。我在文本框退出事件中使用它。这将向用户指示已选择文本框。

With Me.TextBox1
    .Value = "Full Name"
    .SelStart = 0
    .SelLength = Len(.Text)
    .SetFocus
End With
Cancel = True

答案 2 :(得分:0)

虽然_Enter()事件确实不能处理.SetFocus,但是_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