アプリ版:「スタンプのみでお礼する」機能のリリースについて

『F_入力用(単票フォーム)』で新規入力が行われた場合、明示的に保存操作をさせたく
ダーティー時を使って保存ボタンを作成しました。

ちなみに、なんらかの入力が行われた時は非可視のテキストボックスに「1」が入るようにし
そのテキストボックスに「1」が入っている時はレコードの移動は出来ず、
保存ボタンを押すことによって「1」が消えるという感じに作ってあります。

設計中にその『F_入力用』をダブルクリックで開き試してみたところきちんと稼動してましたが
実際の操作と同様に他のフォームから遷移してくるとなんらかの入力を行っても「1」が
入ってくれません。

いろいろ調べてみると他フォームから遷移されてくるときは、他フォームで入力された情報の一部が
『F_入力用』に表示のみされるようになっており、それが原因でダーティー時が稼動してくれない
ようでした。
(他フォームで入力された情報が表示される『F_入力用』上のテキストボックスを削除してみると
他フォームから遷移されてきてもダーティー時はちゃんと稼動してくれました)
他フォームのリンク元テーブルと『F_入力用』のリンク元テーブルは別のものです。

いろいろ調べてみましたが解決方法がまったくわかりません。
ご存知方がいらっしゃいましたらよろしくお願い致します。

A 回答 (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
    • good
    • 1
この回答へのお礼

お礼が遅れまして申し訳ありません。
大変勉強になりました。
頂いたアドバイスを使わせていただきます。
分かりづらい質問だったと思うのですが本当にありがとうございました。

お礼日時:2008/12/09 20:40

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A