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

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

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

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

Access

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

Q&A

解決済

3回答

385閲覧

どんな方法でフォームが閉じられても、入力途中のレコードが保存されないようにしたい

PyPyPython

総合スコア92

VBA

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

Access

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

0グッド

0クリップ

投稿2025/04/04 02:07

実現したいこと

・フォームのbtn_閉じる(コマンドボタン)のクリック時
・フォーム自体の✕ボタン
・Access自体の✕ボタン

いずれの方法でフォームが閉じられても、フォームで入力途中のレコードがテーブルに保存されないようにしたい。

発生している問題・分からないこと

入力途中のレコードが保存されてしまう。

該当のソースコード

Access

1 2Private Sub Form_Unload(Cancel As Integer) 3 4 If Me.Dirty Then 5 6 Me.Undo 7 8 End If 9 10End Sub 11 12Private Sub btn_閉じる_Click() 13 14 DoCmd.Close 15 16End Sub 17

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

レコードが保存されてしまう

補足

特になし

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

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

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

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

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

sazi

2025/04/04 03:51 編集

連結フォームですよね? >フォームで入力途中のレコードがテーブルに保存されないようにしたい。 逆に保存される契機としているのは何で、そこではどのような処理をしていますか?
guest

回答3

0

ベストアンサー

すでにコメントで指摘されてますがUnloadイベント時では更新は終了してますので手遅れですね。
更新を止めるにはフォームの更新前処理でイベントをキャンセルすることになります。

vba

1'フォームの更新前処理 2Private Sub Form_BeforeUpdate(Cancel As Integer) 3 Cancel = True 4End Sub

これで、下記の場合でもレコード保存されません。

・フォームのbtn_閉じる(コマンドボタン)のクリック時
・フォーム自体の✕ボタン
・Access自体の✕ボタン

ただし、更新中に、フォーム自体の✕ボタン、Access自体の✕ボタンで閉じると「レコードを保存できません」というシステムメッセージが出ます。これを出したくない場合は、フォームの「エラー時」に下記のコードを設定します。

vba

1Private Sub Form_Error(DataErr As Integer, Response As Integer) 2 If DataErr = 2169 Then 3 Response = acDataErrContinue ’エラー メッセージを出さすに続行 4 End If 5End Sub

ただし、こうするといっさいレコード保存ができなくなります。それでは困りますよね。
そこで、「保存」ボタンを配置してそのクリック時にのみレコード保存できるようにします。

vba

1'保存ボタンクリック時 2Private Sub cmd保存_Click() 3 Me.BeforeUpdate = "" 4 DoCmd.RunCommand acCmdSaveRecord 5 Me.BeforeUpdate = "[イベント プロシージャ]" 6End Sub

投稿2025/04/04 05:57

hatena19

総合スコア34328

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

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

sazi

2025/04/04 06:31 編集

DoCmd.RunCommand acCmdSaveRecord だと、対象が明確ではなく、どのような画面構成かも分かりませんので、 If Me.Dirty Then Me.Dirty = False の方が良くありませんか? まあ、ボタンクリックの処理なので、アクティブは限定されているとは言えそうですが。
guest

0

もし更新ボタンといったデータを更新するUIのみでデータの更新を行うというのであれば

vba

1Private Sub Form_BeforeUpdate(Cancel As Integer) 2 If Me.Dirty Then 3 DoCmd.RunCommand acCmdUndo 4 End If 5End Sub

といった感じでBeforeUpdateイベントでデータの更新をキャンセルするようにして
下記のように更新ボタンでの処理でBeforeUpdateイベントのイベントを無効⇒データ更新⇒BeforeUpdateイベントを有効といった処理を行えばいけるのではないでしょうか。

vba

1Private Sub btn_更新_Click() 2 Me.BeforeUpdate = "" 3 DoCmd.RunCommand acCmdSaveRecord 4 Me.BeforeUpdate = "[イベント プロシージャ]" 5End Sub

投稿2025/04/04 05:16

YAmaGNZ

総合スコア10540

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

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

guest

0

単純に表の更新をキャンセルするのは?

vba

1Private Sub Form_Unload(Cancel As Integer) 2 ' 保存をキャンセルする例 3 If Me.Dirty Then 4 Me.Undo 5 End If 6End Sub 7

投稿2025/04/04 02:55

MasahikoHirata

総合スコア3766

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

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

dodox86

2025/04/04 03:23 編集

Form_Unloadでの例は、質問の「該当のソースコード」のところで同様のものが示されていませんでしょうか。 ※入力しても終了の方法、タイミングでMe.Dirtyがセットされないケースがあるのかなと思って私も注視している質問です。 [脱字修正済み]
YAmaGNZ

2025/04/04 03:49 編集

ぱっと調べた感じではUnloadイベントが発生するタイミングでは更新が終わっているようです。 https://support.microsoft.com/ja-jp/topic/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9-%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AE%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%81%AE%E9%A0%86%E5%BA%8F-e76fbbfe-6180-4a52-8787-ce86553682f9#bm3 BeforeUpdateイベントのタイミングでは閉じられる途中でのイベントなのかを認識できない為このイベント単独でも対応は難しいこととなります。 なのでBeforeUpdateイベントで更新前のデータを覚えておくなどして、Unloadイベント時に元に戻すといった処理になるのではないかと思われます。 BeforeUpdateイベント後にデータを確定するタイミングをどうすればいいのかはぱっと思いつきませんが・・・
MasahikoHirata

2025/04/04 04:03

失礼しました。 変な回答になってしまい申し訳ございません。 もっと考えてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問