4

我在 MS Access 表单的文本框的 AfterUpdate 事件中添加了以下代码:

Private Sub txtComments_AfterUpdate()
With Me!txtComments
    .SetFocus
    If Len(.Value) > 0 Then
        DoCmd.SetWarnings False
        .SelStart = 1
        .SelLength = Len(.Value)
        DoCmd.RunCommand acCmdSpelling
        .SelLength = 0
        DoCmd.SetWarnings True
    End If
End With
End Sub

这会在用户退出该字段时运行拼写检查。它部分有效。它打开拼写检查对话框,并找到第一个错误。问题是,当您单击忽略、更改等来处理/修复拼写错误时,代码失败并出现以下错误框:

“为此字段设置为 BeforeUpdate 或 ValidationRule 属性的宏或函数正在阻止 Microsoft Office Access 保存该字段中的数据。”

我尝试在拼写检查代码之前添加记录保存代码:

DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70 DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70

但这并没有解决它。

4

2 回答 2

5

此代码用作 On Exit 事件(而不是 After Update)。

Private Sub txtComments_Exit(Cancel As Integer)
With Me!txtComments
    .SetFocus
    If Len(.value) > 0 Then
        .SelStart = 1
        .SelLength = Len(.value)
        DoCmd.RunCommand acCmdSpelling
        .SelLength = 0
    End If
End With
End Sub
于 2012-08-02T20:32:36.743 回答
3

使用与控件关联的更新事件是行不通的,因为每次更改都会再次触发该事件。您需要一个按钮,或类似:

Private Sub Spell_Click()
    With Me!txtComments
        .SetFocus
        .SelStart = 0
        .SelLength = Len(Me!txtComments)
    End With
    DoCmd.RunCommand acCmdSpelling
End Sub

通过添加一行可以避免 On Exit 事件的一些问题:

    If Me.txtComments.Value <> Me.txtComments.OldValue Then
       With Me!txtComments
           .SetFocus
           .SelStart = 0
          .SelLength = Len(Me!txtComments)
       End With
    <...>    

至少这只会在您通过控件直到保存记录时才会运行,而不是每次都运行,无论 txtComments 是否更改。

于 2012-08-02T19:15:53.487 回答