Microsoft Access 掲示板

テキストボックス内データ変更時の処理 / 3

4 コメント
views
4 フォロー
3

下記のような感じでどうでしょうか。

変更の確定コマンドボタン
名前 cmdSave

取消コマンドボタン
名前 cmdUndo

フォームモジュール

Private Sub cmdSave_Click()
    Me.BeforeUpdate = ""
    DoCmd.RunCommand acCmdSaveRecord
    Me.BeforeUpdate = "[イベント プロシージャ]"
End Sub

Private Sub cmdUndo_Click()
    If Me.Dirty Then
        Me.Undo
    End If
End Sub

Private Sub Form_AfterUpdate()
    Call InitTextbox
End Sub

Private Sub Form_BeforeUpdate(Cancel As Integer)
    Cancel = True
End Sub

Private Sub Form_Undo(Cancel As Integer)
    Call InitTextbox
End Sub

Public Sub InitTextbox()
    'テキストボックス初期化
    Dim CtlObj As Control
    For Each CtlObj In Me.Controls
        If CtlObj.ControlType = acTextBox Then
            CtlObj.BorderColor = RGB(89, 89, 89) '普段は'
            CtlObj.BorderWidth = 1              '黒細線'
        End If
    Next
End Sub

'テキストボックスの更新後処理に設定する関数
Private Function Textbox_Update()
    With Me.ActiveControl
        If Nz(.Value) = Nz(.OldValue) Then
            .BorderColor = RGB(89, 89, 89) '普段は'
            .BorderWidth = 1              '黒細線'
        Else
            .BorderColor = RGB(255, 0, 0) 'データ変更時は'
            .BorderWidth = 2              '赤太線'
        End If
    End With
End Function

フォームのデザインビューで、入力用のテキストボックスをすべて選択して、
「更新後処理」プロパティに =Textbox_Update() と設定。

通報 ...
  • 4
    ゲッキョク駐車場 2020/05/28 (木) 17:11:57 cb55f@f6500 >> 3

    ありがとうございます!希望通りの動きになりました!
    Form_BeforeUpdate(Cancel As Integer) で Cancel = True としているので
    更新後処理も使えないものだと思っていました。

    TXTBOXの数も多く、1つ1つ設定するのもアレでしたし、
    今回の物では標準モジュールも使わなくて済み、わかりやすいプログラムで助かりました!
    ありがとうございます。😃