Excel 如何将焦点设置为新可见的文本框

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

我有一系列的文本框,每个文本框上都有验证。 如果textbox值通过验证,我想让下一个textbox可见,并将焦点设置为它。如果没有,我想保留当前文本框。 但是,我无法使文本框可见,然后将焦点设置为它。 以下是一个示例尝试:

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

你可能会有一个惊喜