• ベストアンサー

アクセス テキストボックスが全て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/17068)
回答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

  • Nullについて

    こんばんは!よろしくお願いします。 新規に作成したフォームにコンボボックスを設置して Sub test1() If Form_フォーム1.コンボ0.Value = Null Then Form_フォーム1.コンボ0.Value = "" End If MsgBox Form_フォーム1.コンボ0.Value End Sub Sub test2() If IsNull(Form_フォーム1.コンボ0.Value) = True Then Form_フォーム1.コンボ0.Value = "" End If MsgBox Form_フォーム1.コンボ0.Value End Sub 上記2つのサンプルを実行した時に、 test1のほうだけ 実行時エラー94 Nullの使い方が不正です。 となります。 ウォッチウインドウで見ていくと、 「オブジェクト変数、またはwithブロック変数が設定されていません。」 となりますが 「If Form_フォーム1.コンボ0.Value = Null Then」 を通過したら Nullになります。 何が起こっているのでしょうか?

  • AccessのコンポボックスでNULLを入れたくない

    AccessのコンポボックスでNULLを入れたくない Accessのテーブルで、NULLの代わりに0を入れたいのですが、どうすればいいのでしょうか? テーブルの既定値は0です。 そのテーブルには、フォームのコンボボックスから値を入れます。 そのコンボボックスの選択は必修ではありません。 そのため、選択しない場合は、既定値の0が入ります。 また、選択した場合は、数字が入ります。 問題は、コンボボックスで選択して、やめた場合です。 まず、コンボボックスで選びます。 でも、きが変わり、デリート(削除)でコンボボックスを空欄にします。 そして、更新した場合、テーブルにNULLが入ります。 私の希望は、コンボボックスをデリート(削除)した場合、既定値の0を入れたいのですがどうすればいいのでしょうか? 値要求は、メッセージ(ダイアログ?)が出るので、設定しないものとします。(他の人が、そのメッセージが出るたびに、どうすればいいかきいてくるからです。) よろしくお願いします。

  • アクセス2007 入力済テキストBOXをコンボ変更

    いつもお世話になっております。アクセス初心者です。 エクセルに入力済みの送料(経費)をアクセス2007にインポートし、 入力用のデータファイルを作成しております。 データは、郵送テーブルとメール便テーブルにわけ、それぞれ、別のフォームを作成しました。 フォームは、「ID」「発送日」「送付先」「送付ツール」「単価」「送付数」「合計」「備考」を それぞれテキストボックスにて表示してあります。 データをエクセルからインポートしたため、郵送フォームルも、メール便フォームも、最初からある程度データが入っており、「発送ツール」(定形・定形外・ゆうパック等)のテキストボックスや、「単価」のテキストボックス(80円・160円等)にも、データが入ったままです。 しかし、今後、このフォームを使い、データを追加していく場合、「発送ツール」や、「単価」は、テキストボックスに直接入力ではなく、コンボボックスでプルダウンメニューを表示していくやり方にしたいのですが、変更の仕方がわかりません。 仕様としては、「発送ツール」で、「定形・定形外・ゆうパック」等選んだ場合、「単価」が自動表示されるのではなく、「単価」も「80円・120円・380円」等から任意で選び、ありえない組合せの場合には、メッセージボックスで、「その組合せはできません」のような表示がされるようにしたいのです。 現在、「単価」と「送付数」にはそれぞれ、VBAで以下のプログラムを入力して、「合計」が表示されるようにプログラムしてあります。(見よう見まねで作成し、とりあえず動いてます) Private Sub 送付数_AfterUpdate() If Not IsNull(Me![送付数]) And Not IsNull(Me![単価]) Then Me![合計] = Me![単価] * Me![送付数] ElseIf IsNull(Me![送付数]) Then Me![合計] = Null MsgBox "送付数を入力して下さい" End If End Sub Private Sub 単価_AfterUpdate() If Not IsNull(Me![送付数]) And Not IsNull(Me![単価]) Then Me![合計] = Me![単価] * Me![送付数] ElseIf IsNull(Me![単価]) Then Me![合計] = Null MsgBox "単価を入力してください" End If End Sub 現在、このVBA以外は、クエリも作成しておりません。 (初心者なので、クエリとかも良くわからない。) それで、「単価」や「発送ツール」のデータを残したまま、コンボボックスでプルダウンメニューを新たに作製する方法を教えてください。 よろしくお願いいたします。

  • アクセス コンボボックスの選択値による処理分岐

    いつもお世話になっております。 コンボボックスを選択することで処理を分岐させたいのです。 「cmb_選択値」というコンボボックスがあり、 選択しない場合は「選択してください」というメッセージを表示させ、Exit sub 1と選択した場合は、1の処理(call1) 2を選択した場合は、2の処理(call2) 3・・・ というイメージで処理を分岐したいと考えています。 If文までは多少理解できているのですが、 Case文がよくわからない初心者なのでお手数おかけしますが、 ご教示いただけると幸いです。 よろしくお願い致します。

  • Access フォームコンボボックス空白をクエリで抽出したい

    現在access2000を使って、 フォーム1内にコンボボックスを作って コンボボックス内に1,2,3 と項目を入れています。 一方、クエリを使って、上記フォーム内のコンボボックスをつなげて1,2,3をそれぞれ抽出することはできるのですが、 1から3まで全てをiif関数などで 抽出したいと考えてします。 僕が考えた関数は iif(isnull([フォーム1][コンボ1]),is not null ,[フォーム1][コンボ1]) とクエリ抽出条件内に入力すると、結果は、 1、2、3をそれぞれフォームコンボボックスで選択すれば、クエリに反映されるのですが、コンボボックス内を「空白」の状態にすると、1,2,3すべてがクエリで抽出されるのではなく、何も抽出されないという結果になってしまいます。 どうすれば、クエリで1から3すべてを抽出することができるのでしょうか?多分、iif関数内の「空白」は空白として処理されないような気がします。 よろしくお願いします。

  • Accessテキストボックスの未入力チェック

    いつも参考にさせて頂いております。 Accessテキストボックスの未入力チェックで上手くいかず悩んでいます。過去の情報等調べましたが、わかりませんでした。 どなたか宜しくお願い致します。 フォーム1にテキストボックス1、ボタン1があります。 テキストボックスを何も入力せず、Enter等で移動する時にチェックをかけたいです。 もし、テキストボックスに何も入力がなかったら、メッセージを出し、フォーカスをテキストボックスに戻す。 何か入力があれば、ボタンにフォーカスが移動する。 If IsNull(Me.テキストボックス1) = "" Then msgbox "未入力です。" Me.テキストボックス1.SetFocus End If 宜しくお願い致します。

  • ACCESSのクエリの抽出

    ACCESS2003を使っています。フォームのコンボボックスに入っているデータを見てクエリで抽出したいと思っています。 フォームのコンボボックスにデータが入っているときは、そのデータで抽出を行い、nullのときは抽出をやめてすべてのデータを表示させたいです。 抽出項目には、null値はありません。 クエリの抽出欄に下記の式を入れましたがうまくいきません。 IIf(IsNull([Forms]![フォーム名]![コンボボックス名])=true , Is Not Null , [Forms]![フォーム名]![コンボボックス名]) コンボボックスにデータが入っている場合は、抽出はうまくいくのですが、nullのときは、何も表示されません。 どこか式が違っているのでしょうか? よろしくお願いします。

  • Accessのテキストボックスとコンボボックスの違い

    フォームにテキストボックスを3ケ用意し、テキストボックス名をtxt1,txt2,txt3としました。これにコマンドスイッチを作成し、機能を再クエリと設定しました。 フォームのサブフォームに再クエリの結果を表示するようにしました。 クエリのテキストボックス1の抽出条件は 条件  [Forms]![フォーム名]![txt1] または [Forms]![フォーム名]![txt1] Is Null    [Forms]![フォーム名]![txt1] Is Null テキストボックス2の抽出条件は 条件  [Forms]![フォーム名]![txt2] Is Null または [Forms]![フォーム名]![txt2]  [Forms]![フォーム名]![txt2] Is Null テキストボックス3の抽出条件は 条件  [Forms]![フォーム名]![txt3] Is Null または [Forms]![フォーム名]![txt3] Is Null [Forms]![フォーム名]![txt3] と設定し、テキストボックスにデータを入力し実行すると 正しい結果が得られるのですが、テキストボックスをコンボボックスに変更し、コンボボックス名をtxt1,txt2,txt3 とすると、抽出されません。 コンボボックスをテキストボックスのように扱うのには どうするのでしょうか。教えてください。

  • VBA null判定

    Accessでテキストボックスの値をテーブルへ書き込むVBAを作成しているのですが、Null判定がうまくいきません。 ◎環境 OS:Windows7Pro Var:Access2010 DB:MySQL5.6 Private Sub cmdSubmit_Click() Dim Rst As DAO.Recordset Dim ErrT As String Set Rst = CurrentDb.OpenRecordset("m_plan", dbOpenDynaset) '各テキストボックス、Null判定 If IsNull(txtPid) Then MsgBox "プランID[" & txtPid & "]が未入力です" Call txtCrer Exit Sub End If If IsNull(txtPName) Then MsgBox "プラン名が未入力です" Call txtCrer Exit Sub End If If IsNull(txtPsdate) Then Me!txtPsdate = #01/01/2010# End If If IsNull(Me!txtPedate) Then Me!txtPedate = #01/01/2010# End If Debug.Print "プランID["; Me.txtPid & "]" Debug.Print "プラン名[" & Me!txtPName & "]" Debug.Print "開始日[" & Me!txtPsdate & "]" Debug.Print "終了日[" & Me!txtPedate & "]" ↑↑↑↑↑↑↑↑↑ ここで、Null判定を行ってますが、データがあるにも関わらず、処理が続行されたり、Null判定結果が起動するたびに変わります。 On Error GoTo err With Rst .MoveLast .AddNew .Fields("PlanID") = Me!txtPid .Fields("PlanName") = Me!txtPName .Fields("PlanSt") = CDate(Me!txtPsdate) .Fields("PlanEn") = CDate(Me!txtPedate) .Fields("P_Remaks") = Me!txtPbikou .Update End With Rst.Close Set Rst = Nothing err: MsgBox "DBエラー" Debug.Print Rst.Type Debug.Print err.Description Call txtCrer End Sub ただし、下記判定だけのボタンとプロシージャーでは、正常に判定されます。 判定だけの、プロシージャー 'Null判定テスト Private Sub cmdtest_Click() If IsNull(txtPid) Then Debug.Print "[" & txtPid & "]" & "Nullです。" Else Debug.Print "[" & txtPid & "]" & "Not Nullです。" End If If IsNull(txtPName) Then Debug.Print "[" & txtPName & "]" & "Nullです。" Else Debug.Print "[" & txtPName & "]" & "Not Nullです。" End If If IsNull(txtPsdate) Then Debug.Print "[" & txtPsdate & "]" & "Nullです。" Else Debug.Print "[" & txtPsdate & "]" & "Not Nullです。" End If Debug.Print "===============================" End Sub どこが間違っているかまったくわかりません、アドバイスを頂けましたら幸いです。

  • ACCESS VBA で複数項目検索にテキストボックスとコンボボックス

    ACCESS VBA で複数項目検索にテキストボックスとコンボボックスを使用したい txtPC番号というテキストボックス、 com所属部門というコンボボックス、 txt使用者というテキストボックスの どれかひとつの条件が入力されたときに 該当するフォームのレコードを抽出できるようにしたいのですが、 コンボボックスで選択した場合のみうまく抽出できません。 コードのどの部分に誤りがあるのでしょうか? ご指摘願えませんでしょうか? よろしくお願いいたします。 Private Sub cmd01_Click() Me.FilterOn = False If Me!txtPC番号 <> "" Then Me.Filter = "[PC番号]like '*" & Me!txtPC番号 & "*'" ElseIf Me!com所属部門 <> "" Then DoCmd.Requery "com所属部門" ElseIf Me!txt使用者 <> "" Then Me.Filter = "[使用者]like '*" & Me!txt使用者 & "*'" End If Me.FilterOn = True End Sub

専門家に質問してみよう