• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:アクセスのフォームからレコード入力空欄回避のVBA)

アクセスフォームからのレコード入力における空欄回避のVBA

このQ&Aのポイント
  • アクセス初心者のため、帳票式フォームからテーブルへのレコード入力において、空欄回避のためのVBAを作成しているがうまく行かない問題が発生している。具体的には、空欄警告は表示されるが、記録はされてしまう状況となっている。
  • 空欄が入力できるようにするには、製品名、回路記号、部品名、員数の各項目が空欄である場合に警告を表示して処理を中断するようにすれば良い。
  • また、フォームでの製品名の内容だけが次の入力時に残るようにするためには、VBAコードに追加の処理を行う必要がある。

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

  • ベストアンサー
回答No.1

Q、レコード入力空欄回避のVBA。 A、その前に<空欄の発生対処>の見方・考え方。 1、「空欄があれば、次のレコードい移動できない」という縛りの是非。  もしかしたら、その箇所の入力データが判読不能、あるいは不備があるかも知れない。そういう時、ユーザーは空欄のまま次のレコードのデータ入力を行うかも知れない。そうして、調査後に空欄を埋めるかも知れない。こういうケースはままあること。だとしたら<縛り>はユーザーにとっては邪魔でしかない。 2、「空欄」の警告の是非。  私が入力担当者であれば、一々の警告は御免被りたい。入力作業の邪魔でしかない。せめて、2.5秒程度の警告を表示して自動で閉じる<PauseMsg()>でも使用されているのであれば我慢できる。 3、しかし、「空欄」のままのレコードをテーブルには残すべきではない。  とは言っても、空欄を無原則に許可すると、後々の処理で不具合が発生する。そういう不具合の発生原因となるレコードの存在は許すべきではない。「空欄」の発生は許すが、不具合の原因となる「空欄」を含むレコードの入力は許さない。このことを実現するには、入力フォームを閉じる時に、 (1)「許可されていない空欄を含むレコード(OO件)を削除します。」と告知。 (2)そして、DoCmd.RunSQL "DELETE FROM XXX WHERE XXX で一斉削除。 というやり方があります。

nomura83
質問者

お礼

早速のアドバイス、大変ありがとうございます。 仰る通りだと思います。入力者側の目線で考え直してみます。

その他の回答 (1)

回答No.2

達人の見習い・・程度ですが気になる点を幾つか。 テーブル名にカッコを使われていますが後々トラブルの元になりかねないので 使用しない方が賢明かと思います。(半角・全角問わず、他のオブジェクト名も同様) カギカッコ [] で括れば回避できるのですが、ちょっと面倒。 エラー処理は開発中はコメントアウトしておかないと、問題の発生時の解明が難しくなります。 'コメントアウトしておけば実行時エラーならそこで止まってくれます。 で、未入力チェックですが、 >Set Rst = CurrentDb.Op・・・の前に行って、あればメッセージを出してそこで抜ける Exit Sub した方が宜しいかと思います。 また、一個一個メッセージを出さないで 未入力チェックしたいコントロール名の頭に、例えばChk製品名などと統一します。 そして入力チェック部分だけですが dim ctl as control dim msg as string for each ctl in me.controls if left(ctl.name,3) = "chk" then if isnull(ctl.value) then msg=msg & ctl.name & vbnewline end if end if next if len(msg)>0 then msgbox "以下のとこが空っぽ" & vbnewline & msg exit sub end if ここから、Set Rst = CurrentDb.Op・・・で登録開始。 のような感じが良さげな気がします。 以上ご参考まで。

nomura83
質問者

お礼

非常に丁寧にご説明いただき、ありがとうございます。 お礼が遅くなりまして大変申し訳ございません。 早速トライしてみます。

関連するQ&A