![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
下記の件に関しご教授願います。
Excelで、コンボボックスのデータ取得を、ワークシートに書き出してからそれをListFillRange等で行っていましたが、レコードセットしたテーブルのデータを直接取得することは出来ないでしょうか。
RowSourceType = "Field List"等試してみましたがわかりませんでした。もしExcelで出来るようでしたらお教えください。
Dim objcon As ADODB.Connection
Dim objrs As ADODB.Recordset
Dim i As Integer
Set objcon = New ADODB.Connection
Set objrs = New ADODB.Recordset
objcon.Open _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.Path & "\process.mdb"
Dim code As Variant
Dim mmcode As Variant
mmcode = Worksheets("入力sheet").Range("d100").Text
code = "'" & mmcode & "%'" '
With objrs
.ActiveConnection = objcon
.Source = "select 顧客名 from 002顧客名 where 県名 like " & code & ";"
.Open
End With
ここから、ワークシートに書き出してましたが、コンボボックスのリストに直接指定したいのです。
下記の方法で試しましたが、浅い知識ではうまくいきませんでした。
ComboBox4.RowSourceType = "field list"
ComboBox4.RowSource = objrs
何か方法があればお教えください。
No.3ベストアンサー
- 回答日時:
こんにちは。
試しに、下記手順を行って下さい。
1. process.mdb と同じフォルダ内に新規ブックを作成
2. シート名を [入力sheet] に変更
3. D110 セル付近に ComboBox を一つ書き込む
※[表示]-[ツールバー]-[コントロール ツールボックス]から
4. ワークシート"入力sheet" モジュールに下記ソースをコピペ
以上。
' 場所: ワークシート"入力sheet" モジュール
Option Explicit
Private Const MDB_NAME = "process.mdb" ' MDB ファイル名
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Sql As String
Dim sCode As String
' 値が変化したセルが D100 だったら実行
If Target.Address = "$D$100" Then
' 県名コード取得
sCode = Me.Range("D100").Text
' Sql 生成
Sql = ""
Sql = Sql & "SELECT [顧客名]"
Sql = Sql & " FROM [002顧客名]"
If sCode = "" Then
Sql = Sql & ";" ' 全件出力
Else
Sql = Sql & " WHERE [県名] LIKE '" & sCode & "%';"
End If
' コンボボックスにデータ追加
Call ComboBoxAddItem(Sql)
End If
End Sub
' コンボボックスにアイテムを追加します
Private Sub ComboBoxAddItem(ByVal Sql As String)
Dim Cn As ADODB.Connection
Dim Rs As ADODB.Recordset
Dim sConStr As String
' MDB 接続文字列 -----------------------------------------------
sConStr = "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source=" & ThisWorkbook.Path & "\" & MDB_NAME
'---------------------------------------------------------------
Set Cn = New ADODB.Connection
Set Rs = New ADODB.Recordset
' DB 接続を開く
Cn.Open sConStr
' 読み取り専用でレコードセットを作成
Rs.Open Sql, Cn, adOpenStatic, adLockReadOnly
' ComboBox に追加
Me.ComboBox1.Clear
If Not Rs.EOF Then
Rs.MoveFirst
While Not Rs.EOF
Me.ComboBox1.AddItem Rs![顧客名]
Rs.MoveNext
Wend
Rs.Close: Set Rs = Nothing
End If
Cn.Close: Set Cn = Nothing
End Sub
ご回答ありがとうございます。
こちらはまだうまくいかないのですが、推測とヘルプ参照だけでは、対応出来ないレベルのようで、VBAのデータベース関連の所を今勉強中です。いま少し時間を下さい。
No.2
- 回答日時:
#1 補足について
Excel VBA の話ですよね?
コントロール名はご自分のものに合わせて下さい。
それから、該当データが1件も無い場合の例外処理も必要ですよ。
ComboBox とはユーザーフォーム上ですか? それともワークシート上に
[表示]-[ツールバー]-[コントロール ツールボックス]で書いたものですか?
この回答への補足
御返事ありがとうございます。
ComboBoxは、ワークシート上に書いたものです。
VBAは、標準モジュールでなく、Worksheets("入力sheet")に書いてます。
宜しくお願いいたします。
No.1
- 回答日時:
こんばんは。
KenKen_SP です。Excel の ComboBox なら AddItem するとか。
ComboBox1.Clear
objrs.MoveFirst
While Not objrs.EOF
ComboBox1.AddItem Rs![顧客名]
objrs.MoveNext
Wend
試してないし、回答はコピペではなく直打ちなので若干ミスがあるが
あるかもしれませんが、こんな感じです。
AddItem 以外ではご質問にあるとおり、セル経由の ListFillRange を
使うか、レコードセットの内容を一度配列にしまって List を使います。
が、、これは「同一内容を別の場所にコピー」するという点でともに
効率の悪い方法ですから最初から AddItem すると良いと思います。
この回答への補足
御返事遅れ大変失礼しました。
試してみたのですが、
1行目で
ComboBox1.Clear
(予期せぬエラー)
が発生、その後1行目を削除して動かしたら
objrs.MoveFirst
While Not objrs.EOF
ComboBox1.AddItem Rs![顧客名]
(オブジェクトが必要です)
と、ここでエラーメッセージがでます。
いろいろ試したのですが、うまくいきませんでした。
追加アドバイスをお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) 2つ目のコンボボックスが動作しません。 3 2023/03/25 12:29
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
EXCEL VBAのコンボボックスに取り込むリストについて
Excel(エクセル)
-
コンボボックスのListFillRangeの変更について
Excel(エクセル)
-
テキストボックスの番号を使ったFor~Next文について
Visual Basic(VBA)
-
-
4
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
5
ExcelVBAでテキストボックスの表示形式を小数点第二位まで表示する方法
Visual Basic(VBA)
-
6
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
7
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
8
VBAでループ内で使う変数名を可変にできないか。
Visual Basic(VBA)
-
9
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
10
コンボボックス内の文字サイズ変更
Excel(エクセル)
-
11
ExcelのComboboxでマウスのスクロールを有効にしたい
Excel(エクセル)
-
12
UserForm1.Showでエラーになります。
工学
-
13
VBA データ(特定値)のある最終行を取得したい
Excel(エクセル)
-
14
vba Listviewでのチェックボックスのイベントを教えてください
Excel(エクセル)
-
15
Excelの入力規則で2列表示したい
Excel(エクセル)
-
16
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
17
VBAのフォームでTextBoxがいっぱいある時
Access(アクセス)
-
18
DATEDIFでマイナス表示をさせたい
Excel(エクセル)
-
19
VBAでシートからコンボボックスにデータを設定する方法
Visual Basic(VBA)
-
20
ブック名、シート名を他のモジュールからも参照可能にする方法
Access(アクセス)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel(M365) Vlookup/セル反転(...
-
VBの色を変えるにはどうしたら...
-
Excel 範囲指定スクショについ...
-
VBAコードについて教えてくださ...
-
【ExcelVBA】インデックスが有...
-
Excelのマクロについて教えてく...
-
Excelのマクロについて教えてく...
-
VBA 別ブックから条件に合うも...
-
Outlookにて既にウィドウ単体で...
-
エクセルVBAコードで教えて下さ...
-
VBA ユーザーフォーム ボタンク...
-
vba アクティブシートの名前変...
-
VBAなくなるの?
-
VBAの計算で@が出てしまう件
-
VBA 複数条件の分岐処理の上手...
-
VB.net(VB)で、フォームにExcel...
-
Excelのマクロでワードのテキス...
-
Outlookの「受信日時」「件名」...
-
プログラミング
-
VBAの質問になります 行の非表示
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAで大量のファイルをシート名...
-
VBA レジストリの値の読み方に...
-
Excelのマクロについて教えてく...
-
ユーザーフォームに別シートか...
-
VBAの計算で@が出てしまう件
-
エクセルVBAについて
-
Vba 実数および実数タイプの変...
-
【ExcelVBA】値を変更しながら...
-
VBA一覧取得 再投稿
-
VBA指定行削除
-
エクセルVBAについて
-
VBA ユーザーフォーム ボタンク...
-
VBA 何かしら文字が入っていたら
-
エクセルについて
-
2つのマクロでチェックボックス...
-
【マクロ】1つのマクロの中に...
-
ExcelのVBAコードについて教え...
-
VB.net(VB)で、フォームにExcel...
-
Vba SelStart、SelLen教えてく...
-
Excel-VBAのmsgBox()の不思議
おすすめ情報