Excel 如何将焦点设置为新可见的文本框
我有一系列的文本框,每个文本框上都有验证。 如果textbox值通过验证,我想让下一个textbox可见,并将焦点设置为它。如果没有,我想保留当前文本框。 但是,我无法使文本框可见,然后将焦点设置为它。 以下是一个示例尝试:Excel 如何将焦点设置为新可见的文本框,excel,vba,setfocus,Excel,Vba,Setfocus,我有一系列的文本框,每个文本框上都有验证。 如果textbox值通过验证,我想让下一个textbox可见,并将焦点设置为它。如果没有,我想保留当前文本框。 但是,我无法使文本框可见,然后将焦点设置为它。 以下是一个示例尝试: Private Sub TextBox2_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) If (IsNumeric(TextBox2.Value)) Then TextBox3.Visible = True
Private Sub TextBox2_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
If (IsNumeric(TextBox2.Value)) Then
TextBox3.Visible = True
'BoxForm.Repaint
TextBox3.SetFocus
Else
StatusLabel.Caption = "Box 2: not a number"
Cancel = True
End if
end sub
我曾尝试将setfocus语句放在几个不同的事件处理程序中,但没有帮助。表单也不会重新绘制。如果TextBox3已经可见,那么它可以正常工作。
我该怎么做
编辑:
我试着使用FainDuru的建议(谢谢!)禁用并重新启用TextBox3(在更新前,然后在更新后),但这两种方法似乎都没有任何效果_重新油漆也没用。焦点希望转到事件序列之前可见的下一个小部件。我甚至试着从下一个widget的_Enter事件中重新聚焦,但那没有任何作用。这就好像TextBox3直到事件级联结束后才被激活。如果TextBox3开始可见,则一切正常。还有其他想法吗?VBA在这个问题上有一个老问题。。。有时,在某些情况下,它会失去对某些表单控件(包括文本框)的引用 试着用一些乍一看会显得愚蠢的东西来记住它:在设置焦点之前,使用:
`Me.TextBox3.Enabled = False`
接
Me.TextBox3.Enabled=True
只有在这之后,才能使用Me.TextBox3.SetFocus
你可能会有一个惊喜