OBA中的VBA拼写检查(Access 2016)崩溃访问

时间:2018-05-03 15:03:46

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

我在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个字的“访问”崩溃,则用户需要重新启动该程序。我试图更改代码以运行On Exit事件,但它没有帮助。我也反编译数据库,发现没有错误。

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

我猜测Access正在崩溃,因为多次更正会再次触发事件,因为拼写检查已经在运行程序崩溃。知道怎么解决吗?

评论中的更新说明

  • 在我的测试中,我发现当你多次按Enter键时 在字段中输入,会导致程序崩溃。
  • 文字字段为LONG TEXT
  • 表单字段绑定到文本字段

1 个答案:

答案 0 :(得分:0)

我能够使用长文本字段和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