我在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
语句,我都会得到相同的结果。
答案 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