• ベストアンサー

ExcelVBA でリストリストボックスにNULLを挿入

Excel2000のVBAで、フォーム上のリストボックスに、ADO経由でSQLサーバーからデーターを読み込もうとしています。 これを実行すると、NULLの項目をリストボックスにセットしようとしたところで、 ----------------------------------------------- 実行時エラー'-2147352571(80020005)': Listプロパティを設定できません。種類が一致しません。 ----------------------------------------------- と、エラーになります。 「-2147352571」をネット検索しても判明せず、OnErrorステートメントでしのいでいても、釈然としません。 どなたか、このエラーの回避方法、もしくはこのエラーの詳細をご教授頂けませんでしょうか?

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

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

その部分のソースがどうなっているか分かりかねますが、 ユーザーフォームにリストボックスを1つ貼り付けて以下の記述をしたら再現しました。 Private Sub UserForm_Initialize() ListBox1.AddItem "" ListBox1.List(0) = Null End Sub で、回避策は Private Sub UserForm_Initialize() ListBox1.AddItem "" ListBox1.List(0) = Null & "" '←""と連結して文字列化。 End Sub リストボックスに使えるのは文字列なので、Nullを入れると型が合わずエラーになります。 SQLサーバからのデータが何であれ、 「 & ""」を付けておけばいつもエラーにはならずに済むでしょう。 ただし、Nullの場合は空文字がリストボックスに入る事になりますがそれで良いのでしょうか?

komakusa
質問者

お礼

ご回答ありがとうございます。 ADOでDBから読み込んで(dbCols)次のような記述をしてます。 Me.ListBox1.ColumnCount = 7 '列数 ' 必要項目を選択してセルにセット Set dbCols = dbRes.Fields Me.ListBox1.AddItem dbCols("ofce").Value '.Listで該当列にデータをセット Me.ListBox1.List(setY, 1) = dbCols("padr1").Value Me.ListBox1.List(setY, 2) = dbCols("padr2").Value ・・・ リストボックスにNULLを入れられない点をお明確にしたかったことが今回の目的でした。(スミマセン、基礎的な勉強もせず作ってます) 店舗名称に対して、補助的な情報として住所を表示したい、ただDBには入力されていない場合もあるので、その場合は空白、と言うことですので、アドバイス通りの対処で問題ありません。 ありがとうございました。

その他の回答 (1)

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

下記は十分判って無い者の発言と言うことでお許し下さい。 #1のご回答のように(似た表現) Private Sub UserForm_Initialize() a = Null ListBox1.AddItem a End Sub はご質問のエラーに成りました。 しかし、質問のケースでは (A)ファイルデータからデータを読み、ある項目(フィールド)をAddItemでリストにセットしようとしているのでしょうか。であればその時のファイルから読みこんでメモリへデータを受けたとき、そのフィールドの変数の値はどうなっているのでしょうか。Nullと言う値なのでしょうか。 であればIsNull関数で(IF文などで)聞いて、回避し、リストボックスのアイテムにセットしない方法や別のスペースでもセットすれば良いのではないでしょうか。 データ値の内容がNullと断定した根拠はなんでしょうか。 --- (IsNullのヘルプ抜粋) Null 値は、バリアント型 (Variant) に有効なデータが入っていないことを示す値であり、変数が初期化されていないことを示す Empty 値や、Null 文字列と呼ばれる長さが 0 の文字列 ("") とは異なります。 ---- 参考 Nullについて http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/vb_p07.htm 「特にデータベースのレコード項目などで Null 項目が発生しやすい。この場合の Null 項目を参照しようなどとすると VB では例外エラーが発生する」 その次に「if IsNull(rs("数量")) then・・・」の例が 上がっている。 ---- http://park18.wakwak.com/~greenspace/dev-api/theapi/howtouse.html vbNullChar:一般的なNULL文字(キャラクターコード0)を表す定数。 vbNullString:C/C++での空文字列(長さ0、NULLのみ)を表す定数。 vbNull:変数の型を調べる、VarType関数の戻り値のひとつ。バリアント型に格納されている型が無い場合に、この値が返される。 これは整数型の定数で、値は整数の1になる。 ---- (B)または「フォーム上のリストボックスに、ADO経由でSQLサーバーからデーターを読み込もうとしています。」は 質問の枕言葉で、関係なく、「=Null」を代入しようとしているなら、最終結果として、リストアイテムの状態としては、何がしたいのでしょうか。 ---- Private Sub UserForm_Initialize() For i = 1 To 5 UserForm1.ListBox1.AddItem Cells(i, "A") Next i ' Cells(6, "A") = vbNull UserForm1.ListBox1.AddItem vbNull 'Cells(6, "A") UserForm1.ListBox1.AddItem "" 'UserForm1.ListBox1.RemoveItem 4 End Sub はエラーになりませんでした。 ---- 何かNullの(文法的な)使い方の問題か、データベースソフトのフィールド変数へのセットする値の問題と思うのですが、浅学のため十分結論が言えないで済みません。

komakusa
質問者

お礼

回答ありがとうございます。 データーがnullと判断した根拠は、デバッグモードで変数をマウスオーバーしたときに表示されていたことと、Onerrorステートメントでデーターを表示させたときの内容です。 店舗の情報をリストから選んでシートに挿入と言うことをしたく、ただすべての項目(郵便番号や住所、電話番号)が入力されてはいないので、されていない場合はnullのままで出力したかったのです。 リストボックスでNULLが扱えないことがはっきりさせたかったので、今回の質問をしました。 ありがとうございました

関連するQ&A

  • ExcelVBAで作成したフォーム内のリストボックスの見出し表示

    ExcelVBAで作成したフォーム上のリストボックスに見出しをつけたいのですがうまくいきません。御教示願います。 リストボックスのプロパティー設定 ColunmCount = 3;3列作成 ColumnHead = True VBA内容 ListBox1.RowSourceType = "Value list" ListBox1.RowSource = "test1;test2;test3" と作成したのですが、「型が一致しません」と返答されます。 見出しを表示させる為にはどうしたら良いでしょうか? 御教示の程お願い致します。

  • リストボックス内の文字の配置

    Excel2003を使用しています。 ユーザーフォームのリストボックス内の文字の配置を右寄せにしたいのですが、そういう設定は可能でしょうか? 今のままだとマクロを実行してリストが表示されたときに、若干見にくいので、リスト内の配置が設定可能であれば、教えていただきたいです。 よろしくお願いします。

  • ACCESS リストボックスからの選択で

    ACCESSでフォームを作っています。 その中で、条件にあるデータをリストボックスで一覧表示し、その中からデータを選択して、【実行】ボタンで、次のフォームを開くようにしています。 そのときにリストボックスから何も選択していない場合、エラーメッセージを返したいのですが、「選択していない」というのをどうやって判断すればよいでしょうか。 よろしくお願いします。

  • リストボックスの中にコンボボックスを埋め込みたい

    VBAです。 VBAのフォームで添付した絵のようなリストボックスを作りたいと思っています。 イメージとしては、フォルダの中にあるファイルを取得して、それぞれのファイルにどのような 処理をさせるかコンボボックスで決定させるという感じです。 リストボックスにコンボボックスを埋め込むようなことは可能でしょうか? あるいは、別にそれが可能になるコントロールはありますでしょうか? 参照設定等を使っても構いません。 よろしくお願いいたします。

  • フォームのリストボックスに値を表示させたい

    VBA フォームのリストボックスに値を表示させたい A1→aaa A2→bbb リストボックスに上記の値を表示させたいなら、 Private Sub UserForm_Initialize() UserForm1.ListBox1.RowSource = "Sheet1!A1:A2" End Sub で出来ますが、シート上のセルで表示する値を指定するのではなく、VBA上で、リストボックスに表示させる値を指定したいのです。 Private Sub UserForm_Initialize() UserForm1.ListBox1.RowSource = "aaa,bbb" End Sub を実行すると、VBA実行時エラー380になってしまいます。 UserForm1.ListBox1.RowSource = "aaa;bbb" もダメでした。 ご回答よろしくお願いします。

  • コンボボックスにリストが表示されません・・・

    ユーザーフォーム(UserForm)にコンボボックス(ComboBox1)を作ってリストを入れました。 しかしユーザーフォームを実行してもコンボボックスに何もリストが出てきません。 なにが悪いのでしょうか?チュートリアルどおりにやっているのですが・・・(T T) Private Sub UserForm_Initialize() With ComboBox1 .AddItem "東京" .AddItem "名古屋" .AddItem "福岡" End With End Sub Windows2000+Excel2000です。

  • 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になります。 何が起こっているのでしょうか?

  • ExcelVBA でリストリストボックスに列見出しをコーディングでつける

    エクセルVBAのフォームにリストボックスを作り、データーベースから読み出したデータを表示させています。 この時、各列にテーブル名とはちがう列名をつけたいのですが、シートに記述するのではなく、コーディングでつける事は出来ませんか? ControlTipTextに「test1;test;test3;」と指定してみたりしましたが、駄目でした。 どなたかご教授、あるいは出来ません、シートに隠しか方法はありません、と全否定をしてください。

  • エクセルのリストボックスについて

    エクセルのフォームにリストボックスというものがありますが、 コントロールの書式設定→コントロール→選択の種類で複数選択 と拡張選択は、VBAで使用するために存在しているのでしょうか? VBAを使用せずとも使い道があるようでしたら教えてください。

  • SQLのインサートでヌルを挿入できないというエラー

    SQLサーバーで、INSERT INTO・・・selectで抽出した列の値を入れたいのですが、主キーのところで下記のエラーが出ます。 テーブル ・・・の列 '・・・' に値 NULL を挿入できません。この列では NULL 値が許可されていません。INSERT は失敗します。 ステートメントは終了されました。 selectで抽出するテーブルの該当列を確認しても値はあるはずですが・・。 原因は何が考えられますか? お願いします・・・。

専門家に質問してみよう