Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


4885 / 13644 ツリー ←次へ | 前へ→

【53819】ADODBレドードセットをExcelコンボボックスのリストに取り込む HANA 08/2/8(金) 10:53 質問[未読]
【53821】Re:ADODBレドードセットをExcelコンボボッ... Jaka 08/2/8(金) 11:39 発言[未読]
【53827】Re:ADODBレドードセットをExcelコンボボッ... Jaka 08/2/8(金) 13:50 発言[未読]
【53831】Re:ADODBレドードセットをExcelコンボボッ... HANA 08/2/8(金) 15:30 お礼[未読]
【53835】Re:ADODBレドードセットをExcelコンボボッ... ichinose 08/2/8(金) 15:59 発言[未読]

【53819】ADODBレドードセットをExcelコンボボック...
質問  HANA  - 08/2/8(金) 10:53 -

引用なし
パスワード
   いつもお世話になっています。
DB(ACCESS)のテーブルからSQLで抽出したデータをExcel.Userform上の
ComboBox〜Cbo_現場代理人)〜のデータとして取り扱うのに
下記の方法で行って、上手くいっています。
今回、下記の**ここから** **ここまで**の部分を
    cbo_現場代理人.LIST = Rst1 
というように、取得したレコードセットを一挙にコンボのリストに
とりこみたいのですが、上手くいきません。
実際に取り込みたいレコードセットのfield数(column)は6列です

一度Worksheetsに貼り付けて、RowSorceで・・ というのもなんだか嫌というより
わからないから他の方法でというのが嫌です。

みなさんのアドバイスを是非いただきたいので、どうぞ宜しくお願いします。

  Set Rst1 = New ADODB.Recordset
  msql = "SELECT 氏名,所属 FROM 社員マスタ;"
  Rst1.Open msql, Cn
******* ここから*********
  Do Until Rst1.EOF
    With Me.cbo_現場代理人
      .AddItem Rst1(0)
    End With
    Rst1.MoveNext
  Loop
******* ここまで ********
  Set Rst1 = Nothing

【53821】Re:ADODBレドードセットをExcelコンボボ...
発言  Jaka  - 08/2/8(金) 11:39 -

引用なし
パスワード
   追加していく方法が解らないということでしょうか?
追加なら、こんな感じ。

For i = 0 To 10
  Me.ComboBox1.AddItem
  Me.ComboBox1.List(i, 0) = i & "-CL0"
  Me.ComboBox1.List(i, 1) = i & "-CL1"
  Me.ComboBox1.List(i, 2) = i & "-CL2"
  Me.ComboBox1.List(i, 3) = i & "-CL3"
  Me.ComboBox1.List(i, 4) = i & "-CL4"
  Me.ComboBox1.List(i, 5) = i & "-CL5"
Next

【53827】Re:ADODBレドードセットをExcelコンボボ...
発言  Jaka  - 08/2/8(金) 13:50 -

引用なし
パスワード
   一括ってこういう事なのでしょうか?
2次元配列に入れて使用。
ただ、配列を使う場合、あらかじめ行数を調べてからじゃないと使えないと思いますよ。
ReDim Preserve は、2次元側しか増やせないから。
また、エクセル関数でTRANSPOSEさせても良いですが、要素数に限界があります。

Dim TB(1 To 10, 1 To 6)
For i = 1 To 10
  For ii = 1 To 5
    TB(i, ii) = i & "-" & ii
  Next
Next
Me.ComboBox1.List = TB

【53831】Re:ADODBレドードセットをExcelコンボボ...
お礼  HANA  - 08/2/8(金) 15:30 -

引用なし
パスワード
   早速のアドバイスありがとうございました。
もともとの疑問は、レコードセットもLISTも配列同士なので
.List = Rst1 で回しを使わずにAdd Item できそうな気がしてました。
基本的なところがわからないまま質問して、申し訳ありません。
 jakaさんのおかげで、なんとなくホットしました。
またよろしくお願いします

【53835】Re:ADODBレドードセットをExcelコンボボ...
発言  ichinose  - 08/2/8(金) 15:59 -

引用なし
パスワード
   私は、RangeのCopyfromrecordsetメソッドを使って、一度
セルに落としてから対象コンボボックスのListに代入する方法を
よく使いますが・・・。


>DB(ACCESS)のテーブルからSQLで抽出したデータをExcel.Userform上の
>ComboBox〜Cbo_現場代理人)〜のデータとして取り扱うのに
> 下記の方法で行って、上手くいっています。
>今回、下記の**ここから** **ここまで**の部分を
>    cbo_現場代理人.LIST = Rst1 
>というように、取得したレコードセットを一挙にコンボのリストに
>とりこみたいのですが、上手くいきません。
>実際に取り込みたいレコードセットのfield数(column)は6列です
>
>一度Worksheetsに貼り付けて、RowSorceで・・ というのもなんだか嫌というより
>わからないから他の方法でというのが嫌です。
>
>みなさんのアドバイスを是非いただきたいので、どうぞ宜しくお願いします。
>
>  Set Rst1 = New ADODB.Recordset
>  msql = "SELECT 氏名,所属 FROM 社員マスタ;"
>  Rst1.Open msql, Cn
>******* ここから*********
  if not Rst1.EOF then
    With Me.cbo_現場代理人
      .Column = Rst1.GetRows(, 1)
    End With
    end if   
>******* ここまで ********
>  Set Rst1 = Nothing


なんて方法も考えられます。

4885 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free