【问题标题】:VBA Spell Check in O365 (Access 2016) Crashing AccessO365 (Access 2016) 中的 VBA 拼写检查崩溃访问
【发布时间】:2018-05-03 15:03:46
【问题描述】:

我在 Access 2010 中运行了以下代码 On Lost Focus 事件,没有任何问题。

Dim strSpell
 strSpell = txtMyField
 If IsNull(Len(strSpell)) Or Len(strSpell) = 0 Then
 Exit Sub
 End If
 With txtMyField
 .SetFocus
 .SelStart = 0
 .SelLength = Len(strSpell)
 End With
 DoCmd.SetWarnings False
 DoCmd.RunCommand acCmdSpelling
 DoCmd.SetWarnings True

升级到 O365 (Access 2016) 后,拼写检查没有问题,除非有多个拼写更正。如果用户选择全部更改或更改超过 1 个字 Access crash 并且用户需要重新启动程序。我试图更改代码以运行 On Exit 事件,但没有帮助。我也反编译了数据库,没有发现错误。

我可以运行拼写检查的唯一方法是使用功能区上的拼写检查。我隐藏了功能区以防止用户乱来,所以这个选项不起作用。另外,我想将拼写检查限制在一个字段中,并在用户退出该字段后强制执行。

我猜测 Access 正在崩溃,因为不止一次更正再次触发该事件,并且由于拼写检查已经在运行程序崩溃。知道如何解决吗?

评论的更新说明

  • 在我的测试中,我发现当您按 Enter 几次时, 在字段中输入,它会导致程序崩溃。
  • 文本字段为长文本
  • 表单域绑定到文本域

【问题讨论】:

  • 我怀疑它是否相关,但我会尝试将 IsNull(Len(strSpell)) 更改为 IsNull(strSpell)
  • 你是在txtField的或者Form的LostFocus事件中运行的
  • 此代码在直接 Access 2016 中对我来说工作正常,在 LostFocus 事件和命令按钮单击事件中都有多个错误。我建议尝试办公室维修
  • 我在绑定表单 txtField 事件中运行代码,而不是在表单事件中。办公室维修未能解决问题。
  • 我忘了说它是长文本字段。我在一个新数据库中运行代码,表单中有一个表和一个字段。当我运行代码时,我遇到了同样的问题。从功能区运行拼写检查工作正常,没有错误或数据库崩溃。

标签: ms-access vba office365 spell-checking ms-access-2016


【解决方案1】:

我能够使用长文本字段和 3500 个字符以及大量带有“拼写错误”的项目重复挂起过程“未响应”消息。

使用您的代码,它会因 LostFocus 代码而崩溃,或者即使我将它放在命令按钮中。

我开始怀疑是否是整个文本选择导致拼写检查器在尝试完成其工作时出现错误 - 以及是否需要这样做。

当我将您的代码移出 LostFocus 事件并用 Exit 事件中的此代码替换它时,它可以可靠地工作

编辑:将代码移动到退出事件并指定特定的文本字段

Private Sub txtMyField_Exit(Cancel As Integer)

    With txtMyField
        'If the textbox has data run the Spell Checker   
        If Len(.Value & "") > 0 Then
            .SetFocus
            .SelStart = 0
            .SelLength = Len(.Value)
            DoCmd.SetWarnings False
            DoCmd.RunCommand acCmdSpelling
            DoCmd.SetWarnings True
            .SelLength = 0
        End If
    End With
End Sub

【讨论】:

  • 感谢您迄今为止的所有帮助!我测试了你的代码,它可以工作。由于我们没有将焦点设置在字段上,因此拼写检查开始检查表单中的所有字段。有没有办法在不设置焦点的情况下阻止它在场之间移动?
  • 不确定你的意思。如果您不更改焦点,拼写检查器如何知道正在编辑哪个字段?无论如何,如果这回答了这个特定问题,您应该将其标记为这样,并可能开始一个新问题。您是在谈论遍历表单上的所有长文本字段,对每个字段进行拼写检查并将编辑后的数据保存到字段中吗?
  • 您的代码的问题是拼写检查正在检查表单中的所有文本字段。我需要将拼写检查限制为一个字段。
  • 啊-好吧-有道理-我只在我的测试表上使用了一个字段
  • 好的 - 修改代码以使用退出事件 - 适用于我的两个字段表单
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-15
相关资源
最近更新 更多