毎回大変お世話になってます。
今回は選択条件によりサブフォームのフィールドを入力必須に出来ないかなと思いまして。
メイン/サブフォームがあります。サブフォームにはF1:項目A F2:項目B F3:取引先 等のフィールドがあります。
F1~F3はコンボボックスからのID選択の形です。F1・F2は入力必須で、F3は通常NULLなのですがF1・F2の選択値によっては入力必須になります。
例えばF1orF2にIDの9を選択時にはF3を未選択では先に進めないようにしたいのです。
F3には条件付き書式で [項目A]<>9 And [項目B]<>9 で使用不可にして入力出来ない様にしているのですが未入力を防ぐにはどうすれば考えがまとまりません。
こういう場合はテーブルの入力規制に条件付けて設定は可能でしょうか?
いいアイデアあれば宜しくお願いします。
beginner
通報 ...
フォーカス喪失時イベントで
Cancel=Trueするとコントロールから抜け出せなくなりますねただ、これのほかにF3にフォーカスを移す方法を考える必要があります。自然にF3にフォーカスが移動するような作りであればいいですが、「F1に9を設定したあと、マウスでいろいろ操作して別なレコードに移った」のようなそもそもF3を触らないことがある操作が想定されるのであれば、どこかでレコードの内容をチェックしてF3にフォーカスを移すような制御が必要です
また、F3から抜け出せない状態になっていても「閉じる」操作等できることもあるので、そのあたりにも注意が必要です
最強はF1,F2の更新後処理で9をチェックしてポップアップ、作業ウィンドウ固定のF3入力用フォームを表示するとかですかね?
下記の記事が参考になるかもしれません。
入力必須項目のある入力フォームのUIを考察する - hatena chips
上記は単票フォームでの例ですので、帳票フォームではそのまま使えませんが、使いやすいUIの設計の参考になると思います。
このような入力必須チェック、入力値チェックのUIはいろいろな設計が考えられますが、
ユーザーは入力間違いをすることもあるので、フィールド毎にチェックをすると前段階での入力間違いに気づいても元に戻れないなど、いろいろ複雑になってくるので、とりあえずは入力させて保存時にチェックするのが設計者的にもシンプルにできるし、ユーザーにも負担が少ないように思ってます。
上記のリンク先にも同様の趣旨のことを書いていますが、帳票フォームの場合は、フォームの更新前処理でチェックをするのがいいように思います。Cancel=True でレコード保存できなくなりますので、正しい入力値になるまで次レコードへ移動できません。
あるいは、
テーブルプロパティの「入力規則」で設定することも可能です。
とりあえず質問からわかっている条件は、下記と思われます。
F3は、F1またはF2が9の場合は入力必須、それ以外の場合は入力不可(Null)
その場合の設定例
テーブルプロパティ
ただし、それ以外にも入力値のチェック条件があるのならテーブルプロパティでは複雑になりすぎるので、更新前処理でチェックするのがいいでしょう。
hirotonさん・hatenaさん ありがとうございます。
hirotonさんのポップアップフォームも全く思いつかないアイデアでした。
haenaさんのフォーム自体の更新前イベントのアイデアもそういう手があったかと思いました(フォーム自体の更新イベントは使った事がありませんでしたので)。
さし当たりテーブルプロパティの「入力規則」でも可能との事ですが、IIF関数使う形でしょうか? どういう記述になりますでしょうか?
すみません、設定例ありましたね。参考にして試してみます(失礼しました)
テーブルの入力規則では記述が複雑になりますので(実際は他のID選択時も該当するので)、サブフォームの更新前イベントにコード記述で出来ました。フォーム自体の更新イベントは使ったことがありませんでしたが、便利ですね!
ありがとうございました。お世話になりました。