質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

Q&A

解決済

2回答

6165閲覧

Access フォームでの変更があった場合の判定がわからない

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

0グッド

0クリップ

投稿2019/07/11 00:21

##質問内容
管理システムの入力フォームを作成しているのですが、フォームで何かしらの変更があった場合そのフォームを閉じるときに、「変更されています。よろしいでしょうか」といったメッセージを出したいのですが、その判定がわからないです。

##概要
具体的に変更があった場合とは、
例えば、
テキストボックスに入力しかけている状態で閉じるとき。
(入力したけど、取り消そうとして、入力したものを消したときも含む。)
といった感じです。

何かしら、フォーム内で操作があった場合を指します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dit.

2019/07/11 00:37

とりあえずこちらと関連記事を確認してみてください。 https://hatenachips.blog.fc2.com/blog-entry-15.html これで希望のことができない場合「どの部分が希望と違った」かを質問に追記していただければと思います。
hatena19

2019/07/11 02:12

その入力フォームは連結フォームですか、非連結フォームですか。 連結フォームならdit.さんのコメントのリンク先を参考にしてください。 非連結ならまた、別の話になります。
退会済みユーザー

退会済みユーザー

2019/07/11 02:37

テーブルに直接Insertするものなので、連結フォームです。
hatena19

2019/07/11 03:21

「テーブルに直接Insertする」というのがどのうような意味か分かりませんが、 フォームのレコードソースプロパティにテーブル名が設定されているか、空欄になっているか、どちらですか。
退会済みユーザー

退会済みユーザー

2019/07/11 04:07

設定されています。
hatena19

2019/07/11 04:23

なら連結フォームですので上のリンク先を参考にしてください。
guest

回答2

0

ベストアンサー

連結フォームでフォームを閉じる時に更新があったかどうかをチェックしたいと言うことですよね。

このような場合、イベントがどのような順で発生するかを把握しておく必要があります。

フォームに更新がなかった場合は、読み込み解除時 → 閉じる時 という順で発生します。
フォームに更新があった場合は、更新前処理 → 更新後処理 → 読み込み解除時 → 閉じる時 という発生順になります。

読み込み解除時や閉じる時では、更新処理は終了してますので、Me.Dirtyは Falseになってますので判定できません。

更新後処理では、更新処理をキャンセルできませんので、「変更されています。よろしいでしょうか」と確認して「いいえ」と言われても、手遅れです。

結局、更新前処理で「変更されています。保存しますか。」と確認して、「いいえ」と言われたら、Cancel=True として更新処理をキャンセルすることになります。下記のようなコードになります。

vba

1Private Sub Form_BeforeUpdate(Cancel As Integer) 2 Select Case MsgBox("変更されています。保存しますか?", vbYesNo) 3 Case vbNo 4 Cancel = True 5 End Select 6End Sub

上記のコードで、メッセージボックスで「いいえ」を選択すると、閉じずに編集状態に戻ります。

上記はシンプルな例ですが、この問題は奥が深いです。下記のリンク先と関連記事を熟読されることをお勧めします。

保存前に確認する - hatena chips

投稿2019/07/11 10:31

編集2019/07/11 12:50
hatena19

総合スコア33715

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

If Me.Dirty Then
'変更があった場合の処理
Else
'変更がなかった場合の処理
End If

投稿2019/07/11 07:42

iruyas

総合スコア1067

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問