首页 文章

Excel VBA - 无法将焦点设置在UserForm文本框上

提问于
浏览
2

我在Excel中有一个VBA用户表单 . 它有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 语句,我都得到相同的结果 .

你通过将头撞在墙上来学习 . 经过一天的敲门和谷歌搜索后,我向更高的编程智慧低头 .

斯坦

1 回答

  • 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)

    Edit

    顺便说一句,在你的场景中焦点将回到 Textbox1 的唯一时间是表单中只有两个 TextBoxes .

相关问题