Excel .Setfocus 跳转到错误的控件

问题描述 投票:0回答:0

我正在使用 Excel 2016,遇到一个有趣的问题,即光标跳到我没有命令的位置。

enter image description here

目标是如果组合框“Inspection Type”的值=“Initial”,则跳转到“Svc Date”(txt_svcDate)字段。但出于某种原因,它正在跳转到“Date On”字段。我应该注意,我正在使用 Tab 键离开 cmb_insp 字段。

Private Sub cmb_insp_Exit(ByVal Cancel As MSForms.ReturnBoolean)

If Me.cmb_insp.Value = "Initial" Then
    Me.txt_svcDate.SetFocus
End If

End Sub

离开“Tail #”字段后会发生类似的事情。在该代码中,目标是在组合框“检验类型”=“原始至”时跳转到“日期关闭”字段 (txt_dateOff)。

Private Sub txt_tail_Exit(ByVal Cancel As MSForms.ReturnBoolean)

If Me.cmb_insp.Value = "Original to" Then
    Me.txt_dateOff.SetFocus
End If

End Sub

在第二种情况下,它跳转到“Work Order On”(txt_woOn) 控件。同样,我正在使用 Tab 键退出控件。

在这两种情况下,我都注意到正确输入中的光标在突然出现在错误的框中之前非常短暂地闪烁。

关于这个问题的一些注意事项。 1. 我将设置焦点代码放入命令按钮中,它工作得很好。

Private Sub cmd_Test_Click()
Me.txt_dateOff.SetFocus
End Sub

所以我知道我有我想要设置焦点的所需控件的正确名称。 2. 我尝试使用鼠标点击不同的控件而不是使用 Tab 键,在这两种情况下,上述退出代码都运行良好。 3. 为了测试,我在 Exit 事件中安装了几个消息框以查看它们是否触发。在所有情况下,消息框都出现了,代码运行了,但光标仍然停留在错误的字段中。我什至尝试删除模块中的所有其他代码,只留下这些退出事件,但仍然得到相同的结果。

我还尝试通过在每个 if 语句处停止并一次运行一行来进行调试。我注意到的唯一异常是它实际上在终止之前循环了两次 Sub,有或没有 Cancel = True 语句。

所有代码看起来都是正确的。那么,是什么导致了这些非指令跳跃?

excel vba controls setfocus
© www.soinside.com 2019 - 2024. All rights reserved.