こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

お世話になっております。

アクセスのフォームで
コンボボックスをいくつか設けていて
その指定で処理を分岐させていますが、
全てがNULL(未選択)の場合
エラーメッセージを表示させたいです。

1つであれば
If IsNull(Me.cmb_選択肢1) Then
MsgBox "全てが選択されていません。"
で設定できるかと思いますが、
テキストボックスが複数あり、
それらが全てNULL場合
どうすれば実装可能になりますでしょうか。

初心者につき
初歩的なことが理解できておらず申し訳ございませんが、
ご教示ください!
よろしくお願い致します。

投稿日時 - 2018-04-04 15:42:32

QNo.9485007

困ってます

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

質問の中でテキストボックスとコンボボックスが
入り乱れているので少し戸惑っているのですが、
一応複数のコンボボックスの選択ということで。

いろいろやり方はあるのですが、コンボボックスの名前が
「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文との併用で分岐を提案できますが。
あるいは、特定のコンボボックスが選択されていなかった場合に
特別の処理があるのかなどいろいろと考えが及ぶのですが。
いずれにしろ、思うところを補足してみてください。

投稿日時 - 2018-04-04 19:13:26

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(6)

ANo.6

【補足】テキストボックスであれば・・・・

1、テキストボックスが全て未入力を許可しない仕組みはダメ。

それじゃー、作業者は、未入力のまま前頁の訂正作業に戻れない。

2、全てが未入力なんてフォームはありえない。

頁を開いただけならともかく、一つでも入力があれば[主キー]が決まる筈。問題は、必須入力欄が入力されていないレコードの処理をどうするのか?

対策1、処理を不能にする。
対策2、フォームを閉じた時点で不具合レコードを削除する。

連続した入力であれば、対策2。一回だけの単発ならば対策1。

投稿日時 - 2018-04-04 22:17:25

ANo.5

【補足】

>全てがNULL(未選択)の場合はエラーメッセージを表示させたいです。

 これが、どういうタイミングなのかが今一つ不明だが・・・。仮に、コマンドボタンを押した時ということであれば、そういう状況下ではコマンドボタンを押せなくするのがセオリー。よく、必須入力欄が未入力だと《次に》が押せなくなっていると思う。それと同じ仕組み。

投稿日時 - 2018-04-04 21:50:49

ANo.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】がお勧め。

投稿日時 - 2018-04-04 20:35:25

ANo.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

投稿日時 - 2018-04-04 20:31:38

ANo.1

>全てがNULL(未選択)の場合にエラーメッセージを表示させたい。

初めて聞いた発想。必要ないのでは・・・。

投稿日時 - 2018-04-04 15:48:21

補足

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

投稿日時 - 2018-04-04 16:50:30

あなたにオススメの質問