下記の件に関しご教授願います。
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
ゆるやかでぃべーと タイムマシンを破壊すべきか。
これはディベートの論題だと仮定したうえでの回答お願いします。あなたは、その末にタイムマシンを壊してしまうのか、使い道を探すのかどうかを考えてもらいたいです。
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
EXCEL VBAのコンボボックスに取り込むリストについて
Excel(エクセル)
-
ExcelVBAでテキストボックスの表示形式を小数点第二位まで表示する方法
Visual Basic(VBA)
-
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
-
4
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
5
Excelの入力規則で2列表示したい
Excel(エクセル)
-
6
ListViewで複数選択された項目を一度に削除する方法
Visual Basic(VBA)
-
7
コンボボックス内の文字サイズ変更
Excel(エクセル)
-
8
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
9
ヘッダー
Excel(エクセル)
-
10
VBA:ユーザーフォームのマルチページに色を付けたい。
Word(ワード)
-
11
エクセルVBA テキストボックスに3桁ごとにコンマ
Visual Basic(VBA)
-
12
ExcelのComboboxでマウスのスクロールを有効にしたい
Excel(エクセル)
-
13
Excel VBA コンボボックスで空白を削除
その他(Microsoft Office)
-
14
UserForm1.Showでエラーになります。
工学
-
15
Vba テキストボックス文字を右端から配置していく方法
Visual Basic(VBA)
-
16
ACCESSで値を代入できないとは?
Visual Basic(VBA)
-
17
エクセルVBA ユーザーフォームのTextBoxを日付にしたい
Excel(エクセル)
-
18
コンボボックスにリストが表示されません・・・
Excel(エクセル)
-
19
Excel VBA:フォーム←→セルのアクティブ切り替え
Excel(エクセル)
-
20
VBAでループ内で使う変数名を可変にできないか。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル タブの下のメニューを...
-
Web画面の文字をVB6で取得したい
-
Excel VBA 定義されたプロージ...
-
配列のペースト出力結果の書式...
-
ExcelVBA シート名を複数セルか...
-
VB.net(VB)で、フォームにExcel...
-
VBA 別ブックから条件に合うも...
-
エクセルのマクロついて教えて...
-
サブフォルダに格納されている...
-
VBA レジストリの値の読み方に...
-
Outlookの「受信日時」「件名」...
-
VBA実行後に元のセルに戻りたい
-
エクセルのマクロについて教え...
-
【ExcelVBA】インデックスが有...
-
VBA 別ブックからコピペしたい...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
IF文、条件分岐の整理方法
-
VBA listBoxから
-
VBAの質問になります 行の非表示
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 別ブックからコピペしたい...
-
Vba ファイル書き込み時に書き...
-
Excel_VBAについて質疑です。(...
-
VBAの間違い教えて下さい
-
VBA コードどこがおかしいですか?
-
VBA 円グラフ 特定条件に一致し...
-
VBA 別ブックから条件に合うも...
-
pdfファイルの複数添付 引数の型
-
【ExcelVBA】インデックスが有...
-
ExcelVBAマクロで実行した時の疑問
-
Vba UserformからExcelシートの...
-
VBA初心者です。次のVBAコード...
-
Outlookの「受信日時」「件名」...
-
Excel 範囲指定スクショについ...
-
vbs ブック共有を解除
-
配列のペースト出力結果の書式...
-
Excel VBAで値を変えながら、pd...
-
VB.net(VB)で、フォームにExcel...
-
vbaにてseleniumを使用したedge...
-
ExcelVBA シート名を複数セルか...
おすすめ情報