Accessでフォームプロパティの「ダーティー時」が使えない

このQ&Aのポイント
  • Accessのフォームプロパティである「ダーティー時」を使用して保存ボタンを作成したが、他のフォームから遷移してくるとダーティー時が稼働せず、入力情報が正しく表示されない問題が発生している。
  • 「F_入力用」フォームで新規入力が行われた場合、明示的に保存操作をさせるために、ダーティー時を使用して保存ボタンを作成した。しかし、他のフォームから遷移してくると、入力情報が正しく表示されず、ダーティー時が稼働しない問題が発生している。
  • 「F_入力用」フォームで新規入力が行われた場合、ダーティー時を使用して保存ボタンを作成しているが、他のフォームから遷移してきた場合、入力情報が正常に表示されず、ダーティー時が稼働しない問題が発生している。解決方法をご存知の方がいらっしゃれば、教えていただきたい。
回答を見る
  • ベストアンサー

Access:フォームプロパティ「ダーティー時」が使えない

『F_入力用(単票フォーム)』で新規入力が行われた場合、明示的に保存操作をさせたく ダーティー時を使って保存ボタンを作成しました。 ちなみに、なんらかの入力が行われた時は非可視のテキストボックスに「1」が入るようにし そのテキストボックスに「1」が入っている時はレコードの移動は出来ず、 保存ボタンを押すことによって「1」が消えるという感じに作ってあります。 設計中にその『F_入力用』をダブルクリックで開き試してみたところきちんと稼動してましたが 実際の操作と同様に他のフォームから遷移してくるとなんらかの入力を行っても「1」が 入ってくれません。 いろいろ調べてみると他フォームから遷移されてくるときは、他フォームで入力された情報の一部が 『F_入力用』に表示のみされるようになっており、それが原因でダーティー時が稼動してくれない ようでした。 (他フォームで入力された情報が表示される『F_入力用』上のテキストボックスを削除してみると 他フォームから遷移されてきてもダーティー時はちゃんと稼動してくれました) 他フォームのリンク元テーブルと『F_入力用』のリンク元テーブルは別のものです。 いろいろ調べてみましたが解決方法がまったくわかりません。 ご存知方がいらっしゃいましたらよろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答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

picopico_7
質問者

お礼

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

関連するQ&A

  • Access:検索フォーム

    Access:検索フォーム クエリを基に作成したフォームで「日付2」が変動する検索フォームを作りたいのですが上手く動作しません。 不足などを教えてください; Access2007/WinXP クエリ名 q_出席一覧絞込 1)フィールド名 日付1  クエリ条件 >#2010/01/01#       (2010/1/1以降) 2)フィールド名 日付2  クエリ条件 ([Forms]![出席者絞込]![検索日]に入力した日付以降の日付) フォーム名:出席者絞込 帳票フォーム 1)テキストボックス名:検索日   定型入力: 0000/00/00;0;*   非連結 2)ボタン名:検索ボタン1   クリック時イベントプロシージャ:   Private Sub 検索ボタン1_Click() Me.Requery   End Sub また、フォーム上で元テーブル「出席一覧」のフィールド「単価」の修正機能を加えたい状態です。 (クエリにも「単価」は呼び込んであります) クエリ元のフォーム上で修正>ボタンクリック時にRequeryを記入、という考えでいいのでしょうか? 参考になるサイトなどあればご紹介ください。

  • Access:キャンセルボタンでログイン用フォームを閉じられない

    Access2000、Windows2000を使っています。 とあるログイン用のフォームに、ID入力用テキストボックス、パスワード 入力用テキストボックス、ログインボタン、キャンセルボタンを実装して います。IDとパスワードの入力においてチェックしている事は、 A:空白(未入力)だとダメ←ログインボタンのクリック時にチェック B:入力文字数が8文字以上15文字以下だとOK←各テキストボックスの                   フォーカス喪失時にチェック C:IDとパスワードが、とあるテーブルに登録してあればOK←ログインボタンの                        クリック時にチェック 以上のようなチェックですと、Bの入力文字数が8文字以上15文字以下かどうか のチェックでOKでなかった場合、入力文字数が正しく入力されるまで、 キャンセルボタンを押せません。Tabキーは効かない状態になり、マウス動作でキャンセルボタンにポインタを移動できますが、使えない状態です。 AとCのチェックでひっかかった場合は、キャンセルボタンは使えます。 入力文字数が正しくない場合、各テキストボックスにフォーカスをあてた 状態を保ちつつ、キャンセルボタンのみ使用できる・・・という処理は、 可能でしょうか? どなたか、よろしければ、ご指導おねがいいたします。

  • フォームのプロパティを設定したい(Access2000)

    Access2000 XPです。 都道府県名が1レコードに1つずつ入っているテーブルと 各都道府県名のテーブルが47コあります。 新規でフォームを作成し(フォームのレコードソースはまだ未設定) コンボボックスを1つ置いて、値集合ソースに都道府県テーブルを設定し コンボボックスで選ばれた都道府県にフォームのレコードソースを変更しようと思っています。 Me.RecordSource=コンボボックス.text 単純にこれで良いと思うのですがエラー(入力された値は、フィールド又はコントロールで定義されている入力規則に従っていません)が出て全然更新されません。 どなたか分かる方、解決法をお願いします。。。

  • フォームへの未入力を無くしたい

    [やりたいこと(宜しくおねがいします)] フォームの未入力「コンボボックス」と「テキストボックス」を事前に把握したい。 [(やりたいこと)の実現と希望] このサイトでアドバイスを頂きまして、長年に渡り作成できたデータベースが「68」、入力するフォームは「78」を超えます。現状「フォーム」の構成を生かす方法を含めアドバイスをお願いします。 [入力するフォームに共通していること] 1,コンボボックスとテキストボックス  ・全てのコンボボックスへの選択入力は必須になっている。  ・テキストボックスは未入力箇所も発生する。「未入力箇所は不特定」 2,フォームに共通して配している2つのコマンドボタン  ・フォームを閉じるボタン「マクロ(クリック時)」  ・情報の最新化ボタン「マクロ(クリック時)」   ※コンボボックスの選択項目追加時に反映用として配置 以上ですが、宜しくお願いします。

  • Accessのフォームで

    教えてください。下のようなテーブルがあり、これを元にフォームを作成したいのですがいい方法が見つかりません。 【テーブル】  品物テーブル(品物ID、品物、製作所)  社員テーブル(品物ID、社員コード、氏名) このテーブルを元にして下のようなフォームを作りたいのです。 【フォーム】  品物ID [テキストボックス]  品物 [テキストボックス]  製作所 [テキストボックス]  社員コード [テキストボックス]  氏名 [テキストボックス]  社員コード [テキストボックス]  氏名 [テキストボックス]  社員コード [テキストボックス]  氏名 [テキストボックス] ※社員コード、氏名が3つあるのは、同じ品物を3人が作成することがあるため。(この部分で悩んでいます) このようなフォームを作ることは可能でしょうか? また参考になるようなサイトなどあれば教えてください。 よろしくお願いします。

  • 困ってます!Accessフォームのコンボボックス

    初心者です。とーっても困っています・・・。 顧客データを登録しているのですが、テーブルを元に登録フォームを作成しました。 商品がたくさんあって、4つのコードに分かれています。フォームの中に[A][B][C][D]と4つのコンボボックスを作成し、絞込み検索ができるようにはしました。 が、しかし、選んだデータがテーブルに表示されません。例えば[A]のコンボボックスの中から[1010]を選択、テーブルを見ると、他のテキストボックスに入力した情報は保存されているけど、コンボで選んだデータは空白です。 誰か助けてください!!よろしくお願いします。

  • アクセスフォームについて教えて下さい。

    アクセスフォームについて教えて下さい。 テーブル T_設備 設備管理No. 状態ID(フィールドプロパティ→コンボボックス) 分類ID(フィールドプロパティ→コンボボックス) 設備名 (その他項目あり) T_状態 ID  001  稼動中 002  停止中 T_分類 ID 001  専用機 002  マシニング T_設備、T_状態、T_分類はリレーションシップを組んでいます。 クエリ T_設備を元にクエリを作成 Q_設備 (全データを表示) 稼動中の設備を抽出 Q_稼働設備 停止中の設備を抽出 Q_停止設備 フォーム Q_稼働設備を元にフォームを作成 F_稼働設備一覧(表形式) Q_稼働設備を元にフォームを作成 F_稼働詳細(単票形式) 表形式のフォーム(F_稼働設備一覧)にコマンドボタン(コマンド1)を作成、 OPENFORMメソッドでクリックした行のデータを表示させるようにしました。 (単票形式のF_稼働詳細でデータの詳細を確認したい) Private Sub コマンド1_Click() DoCmd.OpenForm "F_設備詳細" Forms!F_設備詳細!設備管理No. = Forms!F_稼働設備一覧!設備管理No. End Sub しかし、コンボボックスの内容を変更(稼動中から停止中へ)し、フォームを閉じ、 再度F_稼働設備一覧を開くと、データがQ_停止設備へ移動しておらず、 コンボボックスも稼動中に戻ってしまっています。 コマンド1ボタンからではなく、直接F_設備詳細を開き、コンボボックスの停止中を 選択した場合は、データはQ_停止設備へ移動します。 OpenFormメソッドの記入に問題があるのでしょうか? 色々と試しましたが、解決できませんでした。 よろしくお願いいたします。   

  • Accessのフォームのプロパティについて。

    Accessのフォームのプロパティについて。 Accessのフォームで、テキストボックスのプロパティに以下のように指定してあります。  規定値 =TimeValue(Now())  入力規則 Between #7:00:00# And #10:00:00#  エラーメッセージ 受付は7時~10時です。 これで実際にやってみると、規定値のままだと入力規則だと実行されず、20時でも入力できてしまいます。 時刻を入力し直すと、ちゃんとエラーメッセージが出るのですが…。 どうしたらいいでしょうか? また、このテキストボックスは規定値のまま変更できないように  使用可能 いいえ  編集ロック=いいえ にしたいのですが、そうすると、フォームを開きっぱなしにした場合、時刻が更新されず、おかしなことになってしまいます。 どうしたらいいでしょうか? ご回答、よろしくお願い致します。

  • 【VBA】ユーザーフォームから、シート上のテキストボックスを操作

    ユーザーフォームで入力した値を、シート上にあるテキストボックスに入力させたいのですが、 どのように記述すればいいのでしょうか?(ボタンで操作) またおなじくテキストボックスの大きさ、フォントの大きさ、などを操作するにはどのようにしたらいいですか?

  • Access_使用可能プロパティ

    Accessのサブフォーム内のテキストボックスを表示用にしたく テキストボックスのプロパティ「使用可能」をいいえにしました。 しかしデータがないデキストボックスはカーソルを取得しないように なりますが、データのあるテキストボックスはカーソルを取得して しまいます。 他のフォームではデータの有無に関わらずちゃんとカーソルを 取得しないように出来ています。 これは何が原因かお分かりの方お願いしますm(__)m

専門家に質問してみよう