No.2ベストアンサー
- 回答日時:
こんにちは。
maruru01です。連結コントロール(つまり、テーブルのフィールドと連動しているコントロール)には、OldValueという読取専用のプロパティがあります。
このプロパティには、表示レコード(カレントレコード)が読み込まれた時点のデータが格納され、レコードが更新・保存されるまで保持されます。
したがって、変更されたかどうかは、以下のように確認出来ます。
Private Sub btn前_Click()
If Me!氏名.Value <> Me!氏名.OldValue Then
MsgBox "内容が変更されています。"
End If
End Sub
なお、一度でも保存すると、その時点でOldValueの値も更新されます。
No.3
- 回答日時:
一時的な変数を使わずに各コントロールの持っている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プロパティーの使用例を参照してください。
ただ、実際にその項目が変更されたかどうか調べるのはテーブルに保存されているデータと、画面上の項目のデータが一致するかどうか調べる方が確実だと思います。
No.1
- 回答日時:
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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/04/21 13:46
- livedoor Blog(ライブドアブログ) LINEに下記メッセージが届きました。 ブログリーダーに登録した事はありませんし、利用もしてません。 1 2023/02/28 16:33
- gooのスマホ ほっとくと+メッセージ(ショートメール)が使えなくなるってこと? 3 2022/07/13 07:49
- Android(アンドロイド) Googleからのメールに対してどう操作するのか? 1 2023/01/08 19:34
- UNIX・Linux raspberry piを使ったWebサーバー制作をしています、接続するネットワークを変更したときに 1 2023/01/09 15:57
- その他(IT・Webサービス) U-NEXTの解約ができません 2 2022/11/19 18:35
- Evernote Evernoteの操作 1 2023/07/24 17:17
- X(旧Twitter) Twitterにログインしようとしたら、不自然なアクティビティが検出されました。 パスワードが変更さ 1 2023/05/10 22:56
- Android(アンドロイド) アンドロイドスマホで、タップ&ペイご確認下さいというメッセージが出ます。 1 2022/05/15 22:31
- UNIX・Linux Linuxのパッケージ更新で更新前に再起動が必要か確認する方法を教えてください。 needs-res 2 2022/03/24 20:30
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessのマクロでモジュールを...
-
Access VBAで行ラベルが定義さ...
-
エクセルVBAでUserFormを起動し...
-
【Excel VBA】 WorksheetやRa...
-
VBAにおける Option Explicitの...
-
VBA プロシージャの名前の取得
-
DBMS_OUTPUT.PUT_LINEを実行し...
-
或るプロシージャの呼び出し元判定
-
SQL ServerのストアドでUPDATE...
-
PL/SQLのエラーについて
-
Accessでグローバル変数を宣言...
-
VBAをF1~F12で実行させたい
-
VBAのプロシージャー間で、変数の受...
-
Excel VBAで「プログラム実行」...
-
エクセルVBAが対応できるプログ...
-
callで順に実行されるプロシー...
-
Statement ignored というエラー
-
PL/SQLカーソルの2重FORループ...
-
WHERE句の実行順序
-
SQLserver算術オーバーフロ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Access VBAで行ラベルが定義さ...
-
Accessのマクロでモジュールを...
-
エクセルVBAでUserFormを起動し...
-
VBA プロシージャの名前の取得
-
Accessでグローバル変数を宣言...
-
callで順に実行されるプロシー...
-
【Excel VBA】 WorksheetやRa...
-
或るプロシージャの呼び出し元判定
-
OutlookVBAで作成したマクロに...
-
ACCESS2007インポート時の空白...
-
excel/vba/public変数
-
PL/SQLのエラーについて
-
ACCESS マクロをモジュールに変...
-
Excel VBAで「プログラム実行」...
-
Access2016 VBA ボタンのイベン...
-
DBMS_OUTPUT.PUT_LINEを実行し...
-
ブックオープン時にテキストボ...
-
ExcelVBAでしりとりのやり方を...
-
エクセルVBAが対応できるプログ...
-
Accessのプロシージャ名が勝手...
おすすめ情報