【发布时间】:2017-11-10 10:11:03
【问题描述】:
我在 Excel 中有一个用户表单。它有 6 个文本框,它们是用户窗体上唯一将 TabStop 设置为 True 的控件。
我可以通过标签和移动文本框。我无法让SetFocus 处理在文本框之间移动时触发的事件。我可以使用Userform16.Textbox1.Setfocus 在用户窗体上放置一个CommandButton,它可以按预期将焦点移到Textbox1。
我设置了一个简单的测试事件(见下文),以便在输入 Textbox2 时将文本框焦点移回 TextBox1。当我跳出 TextBox1 时,它会将焦点移至 Textbox3。
Private Sub TextBox2_Enter()
Cancel = True
UserForm16.TextBox1.SetFocus
End Sub
通过在上面添加Stop,我可以看到事件按预期触发,但它不允许我控制下一个控件的焦点。
无论是否在 sub 中使用 Cancel = True 语句,我都会得到相同的结果。
【问题讨论】:
-
如果目标是在离开之前验证
TextBox1中的数据,为什么不通过设置Cancel = True在TextBox1_Exit中处理它呢? -
Cancel = True 不会产生任何影响,因为它不是事件中的参数。我似乎记得在 Enter 事件中更改焦点不起作用,因此您可能需要考虑尝试不同的事件。
-
我要做的是在我离开下一个文本框时验证文本框中的日期,但如果编辑失败,则无法将焦点返回到原始文本框并突出显示该文本框中的数据。如上所述,我可以使用 Cancel=True 将焦点集中到原始文本框,但不会向用户指示选择了此文本框。谢谢。