hatena
hatena
2020/05/28 (木) 16:46:54
下記のような感じでどうでしょうか。
変更の確定コマンドボタン
名前 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()
と設定。
通報 ...
ありがとうございます!希望通りの動きになりました!
Form_BeforeUpdate(Cancel As Integer) で Cancel = True としているので
更新後処理も使えないものだと思っていました。
TXTBOXの数も多く、1つ1つ設定するのもアレでしたし、
今回の物では標準モジュールも使わなくて済み、わかりやすいプログラムで助かりました!
ありがとうございます。😃