Vba 在MS Access 2010中必须两次调用SetFocus

Vba 在MS Access 2010中必须两次调用SetFocus,vba,ms-access,setfocus,reentrancy,Vba,Ms Access,Setfocus,Reentrancy,我发现这段代码在几个小时内有效: If KeyCode = 37 Then Me.Text12.SetFocus End If 然后它神秘地停止了工作。我认为这可能与处理OnEnter子例程有关(我将光标移动到文本字段的末尾) 然而,编辑出OnEnter子例程并没有帮助。 我唯一做的另一件事是改变我的输入/键盘语言(能够键入引号并使它们立即出现,呼!) 我现在有了这个代码: On Error Resume Next If KeyCode = 37 Then Me.Tex

我发现这段代码在几个小时内有效:

If KeyCode = 37 Then

    Me.Text12.SetFocus

End If
然后它神秘地停止了工作。我认为这可能与处理OnEnter子例程有关(我将光标移动到文本字段的末尾)

然而,编辑出OnEnter子例程并没有帮助。 我唯一做的另一件事是改变我的输入/键盘语言(能够键入引号并使它们立即出现,呼!)

我现在有了这个代码:

On Error Resume Next

If KeyCode = 37 Then

    Me.Text12.SetFocus
    Me.Text12.SetFocus

End If
这很有效。因此,我知道SetFocus不工作的50多页搜索结果与它被隐藏、禁用、不可见、与牧师外出喝茶等相关,在这里不适用

我还尝试先将焦点设置为另一个控件,并自由地应用DoEvents,这两种方法都没有帮助


有没有人遇到过类似的事情,或者这只是一个非常奇怪的海森堡?

你肯定有别的事情发生了。在第一个
Me.Text12.SetFocus
上设置一个断点,并观察在逐步执行代码时发生的情况(F8

我怀疑您正在触发另一个进程,该进程正在取消第一个
Me.Text12.SetFocus

另一种可能是数据库已损坏。Access很容易做到这一点,尤其是对表单和/或报表进行大量编辑时。转到文件-信息,然后单击压缩和修复数据库

让Access在您关闭它时自动执行此操作不是一个坏主意。转到文件-选项-当前数据库(选项卡),然后选中关闭时压缩

哦,是的,抛出的错误是运行时错误2110-“无法移动焦点”谢谢Tom。我发现它有时会分支到控件的click处理程序,该处理程序正在失去焦点。但有时情况并非如此。因此海森堡。我添加了一个标志,告诉单击处理程序对特定的击键不做任何操作,它似乎解决了这个问题。在此之前,我也尝试了您压缩数据库的建议,但这并没有改变行为。