
『F_入力用(単票フォーム)』で新規入力が行われた場合、明示的に保存操作をさせたく
ダーティー時を使って保存ボタンを作成しました。
ちなみに、なんらかの入力が行われた時は非可視のテキストボックスに「1」が入るようにし
そのテキストボックスに「1」が入っている時はレコードの移動は出来ず、
保存ボタンを押すことによって「1」が消えるという感じに作ってあります。
設計中にその『F_入力用』をダブルクリックで開き試してみたところきちんと稼動してましたが
実際の操作と同様に他のフォームから遷移してくるとなんらかの入力を行っても「1」が
入ってくれません。
いろいろ調べてみると他フォームから遷移されてくるときは、他フォームで入力された情報の一部が
『F_入力用』に表示のみされるようになっており、それが原因でダーティー時が稼動してくれない
ようでした。
(他フォームで入力された情報が表示される『F_入力用』上のテキストボックスを削除してみると
他フォームから遷移されてきてもダーティー時はちゃんと稼動してくれました)
他フォームのリンク元テーブルと『F_入力用』のリンク元テーブルは別のものです。
いろいろ調べてみましたが解決方法がまったくわかりません。
ご存知方がいらっしゃいましたらよろしくお願い致します。
No.1ベストアンサー
- 回答日時:
「ダーティー時(OnDirty)」イベントは、マクロやVBAによる値の代入時には起動
しないので、ご質問の事例には使えないと思います。
現在は
『ダーティ時イベントでテキストボックスに「1」を代入し、レコード移動ボタンを
押したり閉じるボタンを押した際などにそれが「1」なら中止』
としているとのことですが、この「テキストボックスへの記録・参照」の代わりに
『フォームのダーティ(Dirty)プロパティを参照』
とすれば、手入力かマクロ・VBAかによらず、保存済みかどうかを判定できます。
(Dirtyプロパティの値がTrueなら更新中(レコードセレクタが鉛筆マーク相当)、
Falseなら未更新・保存済み(レコードセレクタが横向き▼マーク相当))
※要は、picopico_7さんがテキストボックスに「1」を記録させたのと同様のことを、
Accessが自動でDirtyという枠を使って行ってくれている(しかも手入力か
マクロ・VBAでの代入かに関係なく)、ということです。
VBAで、同フォームから参照する場合の式:
Me.Dirty
マクロの場合、又は別フォームなどから参照する場合の式:
Forms!(フォーム名).Dirty
例えば、VBAで、「新規レコード」ボタンを押したときに上記の確認をする場合は
以下のようなコードになります:
Private Sub 新規レコード_Click()
On Error Goto エラー処理
If Me.Dirty Then 'レコード保存していない場合
MsgBox "先に保存ボタンを押してください", , "確認"
Else 'レコード保存済みの場合
DoCmd.GotoRecord acForm, Me.Name, acNewRec
End If
終了処理:
Exit Sub
エラー処理:
MsgBox Err & ":" & Error$, , Me.Name & " BeforeUpdate"
Resume 終了処理
End Sub
お礼が遅れまして申し訳ありません。
大変勉強になりました。
頂いたアドバイスを使わせていただきます。
分かりづらい質問だったと思うのですが本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
Access サブフォームでの選択行の取得
その他(データベース)
-
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
選択したチェックボックスのみチェックを入れたいのですが
その他(データベース)
-
-
4
アクセスでレコードの内容が変更されたかどうかを調べるには
Access(アクセス)
-
5
アクセスVBAのMe!と[ ]
Access(アクセス)
-
6
Access 複数フォームを開き、画面の最上面にしたいフォームをコント
その他(データベース)
-
7
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
8
Accessで、フォームに情報を入力途中で、やめる(レコードに保存しない)ということは出来ますか?
Access(アクセス)
-
9
新規レコード行を非表示にしたい
Access(アクセス)
-
10
[Access]帳票フォームにて連続する非連結コントロールに個々の値を入れるには
Access(アクセス)
-
11
MS Accessでフォームの「開く時」と「読込み時」のイベントの違い
Access(アクセス)
-
12
ACCESSのフォームで次のレコードに移動しない方法を教えてください
その他(データベース)
-
13
Access フォームのテキストボックスに半角英字のみで入力する設定は
Access(アクセス)
-
14
ACCESSでサブフォームの編集中レコードの処理
その他(Microsoft Office)
-
15
Access2000 サブフォームのRecordSet取得法
Access(アクセス)
-
16
Accessでフィールド名を変数(文字列)で・・・
Access(アクセス)
-
17
Accessでレコードが更新された時に発生するイベント。
その他(データベース)
-
18
Access 「このレコードを保存することはできません」
その他(ソフトウェア)
-
19
Access 別フォームへの再クエリ(更新)がしたい。
その他(データベース)
-
20
Access サブフォームでの複数行選択
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アクセス 前レコード内容を、...
-
アクセス データの競合を非表...
-
ACCESSでフォームを使って、テ...
-
Access2010、値を入力したら自...
-
accessのフォームをレポートに...
-
年月日を持つテーブルから年月...
-
Access レポート印刷するときに...
-
MA ACCESSデータベースに詳しい...
-
チェックボックスの内容をテキ...
-
passwordが入れられません・・・・
-
アクセスのフォームにカンマ区...
-
ACCESSのレポートで、指定した...
-
access 検索フォームで検索が...
-
iphoneのフルスクリーンの解除方法
-
アクセスで特定のレコードのみ...
-
ユーザーフォーム上にある「テ...
-
ACCESSのカレンダーコントロー...
-
アクセス2003 入力規則
-
Accessでフォームの検索結果を...
-
ACCESS カンマをスペースに置...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
レコードを保存するコード ア...
-
新規レコード行を非表示にしたい
-
アクセスでフォームビューがみ...
-
ACCESSフォームのリストボック...
-
レコードをダブルクリックする...
-
アクセスの自動保存解除はでき...
-
ACCESS起動時に所定フォームを...
-
Access:フォームプロパティ「...
-
Accessでレコードの保存をせず...
-
フィルタ後のフォームの件数の...
-
アクセスのフォームで立ち上げ...
-
AccessVBA RecordSourceのリセ...
-
Accessでフォーム上に 直前の...
-
Access レコード移動時イベント...
-
レコード削除時に(サブ)フォー...
-
ACCESSでフォームを使って、テ...
-
Accessで一件の新規レコードの...
-
ACCESSのクエリで抽出したデー...
-
アクセス:フォーム入力で、最...
-
Access 「このレコードを保存す...
おすすめ情報