我在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 回答
您无法将焦点设置为
_Enter()
事件中的另一个控件 . 如果你试图然后代码将焦点移动到控制哪个有下一个TabIndex
例如
假设您有5个带有以下内容的文本框
TabIndex
现在,如果你有这个代码
从
TextBox1
按TAB的那一刻,焦点将移动到TextBox5
(而不是TextBox3
),因为它具有下一个TabIndex
.另外
Cancel = True
也没有任何效果,因为它不是_Enter()
的参数,就像它说Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Edit
顺便说一句,在你的场景中焦点将回到
Textbox1
的唯一时间是表单中只有两个TextBoxes
.