電子書籍の厳選無料作品が豊富!

フォーム上でデータを変更した後にコマンドボタンをクリックしたとき確認メッセージをだしたいのですがどうすればいいですか?

例えば氏名を変更し、コマンドボタン(btn前)をクリックしたとき、確認メッセージをだす。もし何も変更していないときはメッセージを出さないようにしたいのです。変更したときのみメッセージを出したいのですがわかりません!

A 回答 (3件)

こんにちは。

maruru01です。

連結コントロール(つまり、テーブルのフィールドと連動しているコントロール)には、OldValueという読取専用のプロパティがあります。
このプロパティには、表示レコード(カレントレコード)が読み込まれた時点のデータが格納され、レコードが更新・保存されるまで保持されます。
したがって、変更されたかどうかは、以下のように確認出来ます。


Private Sub btn前_Click()

  If Me!氏名.Value <> Me!氏名.OldValue Then
    MsgBox "内容が変更されています。"
  End If

End Sub


なお、一度でも保存すると、その時点でOldValueの値も更新されます。
    • good
    • 0

一時的な変数を使わずに各コントロールの持っているTagプロパティを使うこともできます。

(Tagプロパティーは自由に文字を設定できます。)
あと、ChangeプロパティーよりAfterUpdate関数の方がいいかもしれません。(ESCキーでその項目の変更がキャンセルになった場合も考えて)

#1の例に習うと、

'テキストボックス変更時のフラグセット
Private 氏名_AfterUpdate()
 氏名.Tag="変更"
End Sub
-------------------------------------------------
'コマンドボタンクリック時のメッセージ表示
Private Sub btn前_Click()
If 氏名.Tag = "変更" Then
Msgbox "氏名が変更されました"
End If
End Sub
-------------------------------------------------
'フォームを開くときの変数初期化
Private Sub Form_Open(Cancel As Integer)
氏名.Tag=""
End Sub

どの項目が変更されたかまでの情報が必要でなければ、FormのDirtyプロパティーを使う手もあります。ヘルプでDirtyプロパティーの使用例を参照してください。

ただ、実際にその項目が変更されたかどうか調べるのはテーブルに保存されているデータと、画面上の項目のデータが一致するかどうか調べる方が確実だと思います。
    • good
    • 0

VBAでの処理になるかと思います。


 テキストボックス(氏名)に変更時のイベントプロシージャを記述します。ここに直接メッセージを出すプログラムを書いてもいいですが、ボタンをクリックした時ににメッセージを出すといことですので、テキストボックスの変更時のイベントとしては、フラグを立てる処理を記述しておきます。
 フラグを立てる処理は、パブリック変数を宣言(仮に、NameFlgとします)し、テキストボックスの変更時のイベントプロシージャで、変数NameFlgに"true"をセットします。
それから、コマンドボタンのクリック時のイベントプロシージャで、変数NameFlgの値(true or false)を判別し、IF構文で処理を分岐させます、NameFlgの値が、Trueのときは、メッセージを表示、falseの時は、何も処理を行わないようにします。
 また、このとき、フォームを開く際のイベントプロシージャにNameFlgを初期化(falseをセット)する処理も必要でしょう。
ここにご紹介した考え方は、あくまで、数あるう方法の内の一つです。他にももっとシンプルに処理がで方法もあるとおもいますが、フラグを使った考え方が理解しやすいかとおもいましたので、ご紹介させていただきました。
以下サンプルです。


'変数の宣言
Public NameFlg As Boolean
-------------------------------------------------
'テキストボックス変更時のフラグセット
Private 氏名_Change()
 NameFlg=True
End Sub
-------------------------------------------------
'コマンドボタンクリック時のメッセージ表示
Private Sub コマンドボタン_Click()
If NameFlg = True Then
Msgbox "氏名が変更されました"
End If
End Sub
-------------------------------------------------
'フォームを開くときの変数初期化
Private Sub Form_Open(Cancel As Integer)
NameFlg=False
End Sub
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!