【问题标题】:Trouble with Access 2010 .SetFocus command syntaxAccess 2010 .SetFocus 命令语法有问题
【发布时间】:2019-04-10 22:56:33
【问题描述】:

非常令人费解: 通过 vba 从另一个表单打开一个简单表单时,光标会移动到特定字段。 但是,当此字段为 Null 时,每秒钟出现一次错误 2110。每次使用的语法都会发生变化,如下所示。

更令人费解的是: 单击“调试”后,错误被证明是虚构的:在相应的代码行上,只需按 F5 或 F8 即可继续,过程正确结束,焦点位于所需的位置。

我发现了一个不生成错误消息但希望尽可能避免这种 limping 编码的规定性解决方法

'…
Debug.Print Me![MyTextField].Enabled    ' always True
Debug.Print Me.Name     ' always correct form
Me.Repaint
On Error Resume Next
       [MyTextField].SetFocus    ' without Me!
    Me![MyTextField].SetFocus
    ' Forms![MyForm]![MytextField] : same result as with Me!]
    ' one time error with Me! but not without Me!,
    ' next time vice versa, and so forth…
On Error GoTo 0
'…

当 [MyTextField] 不为 Null 时,两种语法都可以正常工作而不会产生错误。

这个 .SetFocus 命令有什么问题? “修复”数据库没有帮助。

【问题讨论】:

    标签: ms-access error-handling null syntax-error setfocus


    【解决方案1】:

    您不能将焦点设置到具有焦点的控件。它会给你一个非常简单的方法来设置一个无限循环。

    您必须先将焦点设置到另一个控件。

    【讨论】:

    • 谢谢,但焦点仍然在一个命令按钮上,该按钮启动发生错误的过程(已验证 Me.ActiveControl.Name)。当我后来遇到另一个可能与同一过程有关的无法解释的错误错误时,我怀疑编译器失败并将删除整个表单模块并将命令从文本编辑器粘贴到新的模块中(过去有时会有所帮助) !请注意,我使用 Access 2010 ×64 - 已知有一些从未修复的错误。
    • 您所描述的内容听起来像是可能的表单损坏,不幸的是这不是任何版本的访问所独有的,但是您最初的描述说您将焦点设置在控件上,然后在其上捕获错误,那又如何实际代码是用于打开发生错误的表单吗?
    • 确实可能是表单(代码)损坏。我删除了一些程序并重写了一些程序,有问题的行已经没有了。
    【解决方案2】:

    明蒂是对的。一个简单的解决方法是在 if 语句中执行此操作,或创建一个 bool 以查看 IsNull(fieldhere) = true 然后退出 sub 或您的操作。或者更简单地尝试一下:

    if MyTextField.gotfocus = true then
    do something
    else
    MyTextField.setfocus
    

    我最近遇到了类似的问题,不得不创建一个公共 bool 函数并在加载事件上对其进行测试。请注意,我是一个初学者,所以可能有很多更好的方法来完成这个:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-14
      • 1970-01-01
      • 2011-01-30
      • 1970-01-01
      • 2015-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多