下記の件に関しご教授願います。
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も見ています
-
風水の観点で選ぶ観葉植物とは?置き場所や上げたい運気ごとの注意点を紹介!
観葉植物で運気をアップするコツを、風水デザイン1級建築士の福島昌彦さんに伺った。
-
EXCEL VBAのコンボボックスに取り込むリストについて
Excel(エクセル)
-
テキストボックスの番号を使ったFor~Next文について
Visual Basic(VBA)
-
エクセルVBA テキストボックスに3桁ごとにコンマ
Visual Basic(VBA)
-
-
4
コンボボックスのListFillRangeの変更について
Excel(エクセル)
-
5
ExcelVBAのユーザーフォームの中に線を引きたい
Visual Basic(VBA)
-
6
Excelの入力規則で2列表示したい
Excel(エクセル)
-
7
ExcelVBAでテキストボックスの表示形式を小数点第二位まで表示する方法
Visual Basic(VBA)
-
8
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
9
VBA データ(特定値)のある最終行を取得したい
Excel(エクセル)
-
10
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
11
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
12
コンボボックス内の文字サイズ変更
Excel(エクセル)
-
13
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
14
ExcelのComboboxでマウスのスクロールを有効にしたい
Excel(エクセル)
-
15
VBAでループ内で使う変数名を可変にできないか。
Visual Basic(VBA)
-
16
UserForm1.Showでエラーになります。
工学
-
17
Excel VBA コンボボックスで空白を削除
その他(Microsoft Office)
-
18
モーダルフォームとモードレスフォーム
Visual Basic(VBA)
-
19
EXCELで特定のセルに表示された項目をヘッダーやフッターに出力するには
Excel(エクセル)
-
20
VBAのフォームでTextBoxがいっぱいある時
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA指定行削除
-
VBA一覧取得 再投稿
-
VBAコンボボックスで選択した値...
-
エクセルVBAについて
-
【ExcelVBA】値を変更しながら...
-
FileCopy時のエラー
-
VBA 複数のエクセルから一つの...
-
VBA ユーザーフォーム ボタンク...
-
コードを直していただきたいで...
-
2つのマクロでチェックボックス...
-
VBAに詳しい方教えてください。
-
ExcelのVBAコードについて教え...
-
VBA listBoxについて
-
VBA実行後に元のセルに戻りたい
-
Vba 実数および実数タイプの変...
-
エクセルVBAについて
-
現在のブックを閉じないで、マ...
-
Excel VBA 定義されたプロージ...
-
エクセルのマクロについて教え...
-
Excelのマクロについて教えてく...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel VBA 定義されたプロージ...
-
Excel-VBAのmsgBox()の不思議
-
【VBA】マクロの入ったファイル...
-
VBA 複数条件の分岐処理の上手...
-
現在のブックを閉じないで、マ...
-
VBAで各列の"+"と"o"の合計数を...
-
VBAに詳しい方教えてください。
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
ユーザーフォームに別シートか...
-
エクセルのマクロについて教え...
-
ExcelVBA シート名を複数セルか...
-
エクセルのマクロについて教え...
-
VBA listBoxから
-
Excelのマクロについて教えてく...
-
エクセルのマクロについて教え...
おすすめ情報