• ベストアンサー

アクセス テキストボックスが全てNULLの処理

お世話になっております。 アクセスのフォームで コンボボックスをいくつか設けていて その指定で処理を分岐させていますが、 全てがNULL(未選択)の場合 エラーメッセージを表示させたいです。 1つであれば If IsNull(Me.cmb_選択肢1) Then MsgBox "全てが選択されていません。" で設定できるかと思いますが、 テキストボックスが複数あり、 それらが全てNULL場合 どうすれば実装可能になりますでしょうか。 初心者につき 初歩的なことが理解できておらず申し訳ございませんが、 ご教示ください! よろしくお願い致します。

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

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

質問の中でテキストボックスとコンボボックスが 入り乱れているので少し戸惑っているのですが、 一応複数のコンボボックスの選択ということで。 いろいろやり方はあるのですが、コンボボックスの名前が 「cmb_選択肢1」、「cmb_選択肢2」・・・、のようであれば、 たとえば、対象のコンボボックスが三つとしてあっさりと、 Private Sub コマンド6_Click() Dim ctl As Control Dim i As Integer i = 0 For Each ctl In Me.Controls   If Left(ctl.Name, 7) = "cmb_選択肢" Then     If IsNull(ctl) Then       i = i + 1     End If   End If Next ctl If i = 3 Then   MsgBox "すべてのコンボボックスが選択されていません" End If End Sub 一応、 Left(ctl.Name, 7) は、「cmb_選択肢1」の左から7文字までを取得し、"cmb_選択肢"という文字列 と比較しています。また、 If i = 3 Then の「3」は「cmb_選択肢1」のような対象となるコンボボックスの個数です。 もう少し、コンボボックスの選択について、 1 全部選択されていなっ方場合。 2 二つ選択されていなっかた場合(一つ選択した場合) 3 一つ選択されていなかった場合(二つ選択した場合) 4 全部選択されている場合 などの場合に、処理を分岐させるならばそのあり様がわかれば たとえば、Case文との併用で分岐を提案できますが。 あるいは、特定のコンボボックスが選択されていなかった場合に 特別の処理があるのかなどいろいろと考えが及ぶのですが。 いずれにしろ、思うところを補足してみてください。

その他の回答 (5)

回答No.6

【補足】テキストボックスであれば・・・・ 1、テキストボックスが全て未入力を許可しない仕組みはダメ。 それじゃー、作業者は、未入力のまま前頁の訂正作業に戻れない。 2、全てが未入力なんてフォームはありえない。 頁を開いただけならともかく、一つでも入力があれば[主キー]が決まる筈。問題は、必須入力欄が入力されていないレコードの処理をどうするのか? 対策1、処理を不能にする。 対策2、フォームを閉じた時点で不具合レコードを削除する。 連続した入力であれば、対策2。一回だけの単発ならば対策1。

回答No.5

【補足】 >全てがNULL(未選択)の場合はエラーメッセージを表示させたいです。  これが、どういうタイミングなのかが今一つ不明だが・・・。仮に、コマンドボタンを押した時ということであれば、そういう状況下ではコマンドボタンを押せなくするのがセオリー。よく、必須入力欄が未入力だと《次に》が押せなくなっていると思う。それと同じ仕組み。

回答No.4

>そうでしょうか? そりゃー、場合にもよるが・・・ >全てがNULL(未選択)の場合にエラーメッセージを表示させたい。 の意味次第。 ある処理を実行させる際に《未選択を告知》というなら話が判る。で、その場合は If IsNull(Me.cmb_選択肢1) Then   MsgBox "全てが選択されていません。" End If の構文でOK。 【例1】   Witn Me     If Len(.cmb_選択肢1 & .cmb_選択肢2 & .cmb_選択肢3 & "")=0 Then       MsgBox "全てが選択されていません。"     Else       処理     End If   End With 【例2】   isSelect = Len(Me.cmb_選択肢1 & "")   isSelect = isSelect + Len(Me.cmb_選択肢2 & "")   isSelect = isSelect + Len(Me.cmb_選択肢3 & "")   If Not isSelect Then     MsgBox "全てが選択されていません。"     Else       処理     End If   End If  プログラムコードを見やすくするには、【例2】がお勧め。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

参考  エクセルのユーザーフォームの例で説明。あくまで考え方の例 テクストボックス3つ、コマンドボタン(入力完了のつもり、を知らせる)1つ設けた Private Sub CommandButton1_Click() 'MsgBox UserForm1.Controls(TextBox).Count Dim myCtrl As Control blk = 0 For Each myCtrl In Me.Controls Select Case TypeName(myCtrl) Case "TextBox" If myCtrl.Text <> "" Then blk = blk + 1 End If Case "Label" Case "ListBox" Case "CheckBox" Case "ComboBox" Case "CommandButton" End Select Next myCtrl '--- If blk = 0 Then MsgBox "テキストボックスが3つとも未入力です" '処理 Else MsgBox "1つ以上は入力在り" End If '--- End Sub

回答No.1

>全てがNULL(未選択)の場合にエラーメッセージを表示させたい。 初めて聞いた発想。必要ないのでは・・・。

aka_ao
質問者

補足

そうでしょうか? メッセージの内容はさて置き、どれかを指定しないと大量のデータが出力されてしまうので、どれかを選択してください・・・という設定をしたいのですが?そんなにおかしいことなんでしょうか?すみません、初心者なもので・・。

関連するQ&A