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

このコードは、(After Update ではなく) On Exit イベントとして機能します。

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 に答える