- ベストアンサー
AccessのコンボボックスでNULLを入れたくない方法
- Accessのテーブルで、NULLの代わりに0を入れる方法について教えてください。
- コンボボックスで選択した後、削除するとテーブルにNULLが入ってしまいます。コンボボックスを削除した場合に既定値の0を入れる方法を教えてください。
- 値を選択しない場合は既定値の0が入るように設定していますが、コンボボックスを削除するとNULLが入ってしまいます。NULLの代わりに0を入れる方法を教えてください。
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
VBAになりますが そのコンボボックスの更新後処理に Private Sub コンボボックス名_AfterUpdate() Me!コンボボックス名 = Nz(Me!コンボボックス名, 0) End Sub とすればNullの場合だけゼロに変換されます。
その他の回答 (8)
- kmetu
- ベストアンサー率41% (562/1346)
> でも、これをマクロでやる(VBA以外)ってのは無理でしょうか? なぜマクロでやりたいのかは不明ですが 更新後処理のマクロで 値の代入 アイテム [Forms]![フォーム名]![コンボボックス名] 式 Nz([Forms]![フォーム名]![コンボボックス名],0) でできるでしょう。 エラー時にダイアログで簡単な説明を表示しても、読んでくれないのが人によっては"普通"みたいで、開発者が近くにいるから使用者も甘えてしまうのでしょうね。
お礼
ありがとうございます。 えっ!マクロでも出来るんですか? 私はこの問題にぶつかったとき、VBAでやるしか方法はないと考えていました。 >なぜマクロでやりたいのかは不明ですが このシステムを作るに当っての条件として、だれでもわかると言う条件が付けられました。 その条件で行くと、VBAは却下となります。 しかし、VBAしか方法がないとなれば、例外も認められます。 そのため、マクロでは出来ないと言う確認のため、質問してみました。
- layy
- ベストアンサー率23% (292/1222)
参考に。 ほか、マクロの、条件式あり値の代入やリストボックスを見ておくといいのでは?。 マニュアルは作らなくても簡単な手順説明1フォーム画面あるだけでも違います。
お礼
ありがとうございます。 >簡単な手順説明1フォーム画面あるだけ と、思うのですが、私のところでは、余分な画面があるだけで 「むずかし~、わからん」 「やっぱり、前のシステム(エクセル)の方が簡単や~」 となります。 そのため、不必要に文字を大きくしたりして、なるべく拒否反応が起らないようにする必要があります。 まるで幼稚園児に物を教えるような配慮が必要になります。
- layy
- ベストアンサー率23% (292/1222)
すみません。 3の回答は無視して下さい。 何も選択したくないときのために、「該当なし」の選択肢はどうだろうと考えていたことなので。
お礼
ありがとうございます。 >3の回答は無視して下さい。 よくわからなかったので、また質問するところでした。 >「該当なし」の選択肢 これも考えました。 しかし、増設増設で作ったうえに、時間が経ったため、構造がわかりません。 そのため、該当なしを追加するのが怖くてやめました。
- nicotinism
- ベストアンサー率70% (1019/1452)
さらに追伸 (^^ゞ いくら頑張ってすばらしい操作マニュアルを作成しても 勉強会のような形で半ば強制的に覚えてもらわないと ほとんどの場合は『そこに置いといて後で見るから』で終わってしまい勝ち。 フォームのプロパティのその他タブにヒントテキストてのがありますので 簡単な説明はここに入れてあげましょう。
お礼
さらに追記(T-T) >『そこに置いといて後で見るから』 そんな前向きな答えさえ期待できません。 上を見ればきりがありません。 そして、下を見てもきりがありません。 世の中には、創造を超えるところもあるようです。
- nicotinism
- ベストアンサー率70% (1019/1452)
追伸 まったく見ず知らずの第三者に使ってもらうのではなく 社内で使用する場合には、ある程度運用面で対応して行ったほうが良いかと 思います。 >他の人が、そのメッセージが出るたびに、どうすればいいかきいてくるからです。 社内使用の場合なら、そのアプリケーションの操作マニュアルを作り また、コンボボックスはプルダウンした中から選ばんとイカン等々の 教育も必要かと。 作りこむのも大切ですがね。 正直『よくやってくれるよ』と言いたくなることもあり。 ↑これは使用者への愚痴です。
お礼
ありがとうございます。 >コンボボックスはプルダウンした中から選ばんとイカン等々の 教育も必要かと。 私も、初めのころは、同じ考えでした。 しかし、今は、無理なものは無理と悟りました。 教育するどころか、私が教育された気分です。 あきらめることも肝心。 私が、この会社で唯一覚えたことかも知れません。
- layy
- ベストアンサー率23% (292/1222)
コンボボックスでしたね。前の伝えたやり方でなく、更新したい値0をコンボボックスの見せない列に追加したらそう手間かからないし簡単です。 既にあるものは更新クエリで良いです。
- layy
- ベストアンサー率23% (292/1222)
>そのテーブルには、フォームのコンボボックスから値を入れます。 (ユーザにテーブルに0がセットされたかどうかその瞬間で解らせる必要がなければ) フォームのコンボボックスを非連結項目にしておいて、 テーブルへは フォームのコンボボックスの更新後結果を元に更新する。 一通りの入力が終わったときに、 0にしたいデータがどれか、判断できれば更新クエリで一括更新も可能かと 思います。
お礼
ありがとうございます。 今回、テーブルをチェックして、NULLが入ることがわかりました。 だから、今までのデータは、更新クエリで修正するつもりです。 しかし、私は忘れっぽい。 ACCESSなんて、たまにしか触らない為、簡単なことでさえ忘れてしまいます。 今回も、久しぶりのため、入門書片手に質問しています。 そのため、できるだけ手間はかけないようにしたいと考えています。 入力時点で、0が入る処理はないでしょうか? 更新クエリでさえ、覚えておく自信がありません。(情けないですが・・・)
- kmetu
- ベストアンサー率41% (562/1346)
コンボボックスの更新後処理でコンボボックスの値がNULLなら0を入力するようにしておけばいかがですか。
お礼
ありがとうございます。 >更新後処理でコンボボックスの値がNULLなら0を入力するようにしておけば まさに、これがやりたいのですが、やり方がわかりません。 具体的には、どのようにすればいいのでしょうか。
お礼
ありがとうございます。 これで、問題が解決しました。 ところで、最初の条件のところで、VBAは除くと入れようと思っていました。 しかし、それは無理だろうと思い、その条件は除外しました。 でも、これをマクロでやる(VBA以外)ってのは無理でしょうか?