EXCEL-VBAで、WHERE文での、コンボボックスの値の取得方法がよく分かりません。回答集に似たような質問がありましたが、基礎が無い為、前に進めません。都合のよい事を申しますが教えてください。
Sub テスト2( )
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"
With objrs
.ActiveConnection = objcon
.Source = "select * from 002顧客名 where 県名 = Worksheets[sheet1!].ComboBox1.Text;"
'コンボボックスの値の取得ができません
.Open
End With
For i = 1 To objrs.Fields.Count
Cells(1, i).Value = objrs.Fields(i - 1).name
Next
Range("a30").CopyFromRecordset objrs
objrs.Close
objcon.Close
End With
これ以下で、変数宣言するには、何が足りないのか教えてください
objcon.Open _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.Path & "\process.mdb"
Dim name As Variant
name = Worksheets("sheet1").ComboBox1.Text
With objrs
.ActiveConnection = objcon
.Source = "select * from 002顧客名 where 県名 = name;"
.Open
End With
以上、なにとぞご指示をお願いします。
No.2
- 回答日時:
#1です。
あと
1.nameはstring型で宣言するほうがいいかと。
(variantでも間違いではないですが)
2.SQL文でnameは変数なので""の外に出さないとだめです。
"select.* from 002顧客名 where 県名 = '" & name & "';"
この回答への補足
ご回答ありがとうございました。下記の内容で変数宣言ができました。
objcon.Open _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.Path & "\process.mdb"
Dim code As Variant
code = "大阪" & "%" '大阪を含むデータ検索
With objrs
.ActiveConnection = objcon
.Source = "select * from 003業務コード where 顧客名 like '" & code & "';"
.Open
end With
今度は、変数「code」の”大阪 ”の部分をコンボボックスから取得できるように現在格闘中です。
とりあえず、セルの値取得からと思い、下記のとおりコードを書いたら
Dim code As Variant
Dim mmcode As Variant
mmcode = Worksheets("sheet1").Range("b19").Text
code = "'& mmcode &' " & "%" '大阪を含むデータ検索
With objrs
.ActiveConnection = objcon
.Source = "select * from 003業務コード where 顧客名 like '" & code & "';"
.Open
エラ-メッセージ「1つ以上の必要なパラメ-ターの値が設定されていません」といわれました。
どんどん深みにハマっていきます。
(簡単にできると思うのが間違いなのですけどね)
また、アドバイスお願いいたします。。
No.3
- 回答日時:
順序だてて考えてみてください。
code変数に'大阪*'をいれたいと仮定します。
(アクセスの任意の文字は*です)
code = "'大阪*'"
大阪を変数に変えたい場合
code = "'" & "大阪" & "*'"
code = "'" & mmcode & "*'"
となりますね。
ただSQL文のほうで''は指定していますので結局
code = mmcode & "*"
でいいかと思います。
お返事が送れ申し訳ありませんでした。このご回答をいただいてから、変数とテキストのくぎり方を、もう一度整理し直しました。
基礎が無いから、書籍や皆さんのアドバイスを参考に、必要なエッセンスだけを積み上げて前に進むこの方法は、けして良いことではないのはわかっているのですが、限られた時間の中、前に進むため日々もがいております。でもこのプログラムの世界は、とりあえず保留にして前に進むということが難しく(デバックで一切前に進めない)、またプログラムは、技術と同時にデザインでもあり、事務系の情報収集と違い、参考事例を参考にするのが難しい。苦労しますが、これができれば、日常業務が改善できるので、何とか頑張って行きます。これからもご教授お願いします。
No.4ベストアンサー
- 回答日時:
Dim code As Variant
Dim mmcode As Variant
mmcode = Worksheets("sheet1").Range("b19").Text
code = "'" & mmcode & "%' " '大阪を含むデータ検索
With objrs
.ActiveConnection = objcon
.Source = "select * from 003業務コード where 顧客名 like " & code & ";"
.Open
です。
ご回答頂きありがとうございます。やっと前に進むことができそうです。本当に助かりました。
comboboxの値を直接取得して、次のcomboboxの値の検索条件にしたかったのですが、とりあえず、comboboxのテキストをセルに転記させ、その値を参照して検索抽出をさせることにします。combobox軍団を力技で積み上げて入力システムを作り、後からサブルーチンを利用できるか検証してみます。
変数mmcodeの値を指定した後、変数codeの宣言時にmmcodeをテキスト扱いするというのが、ポイントのようですね。
mmcode = Worksheets("sheet1").Range("b19").Text
code = "'" & mmcode & "%' " '大阪を含むデータ検索
変数宣言したものを、テキストとして扱わなければならない。でも次の1行
Source = "select * from 003業務コード where 顧客名 like " & code & ";"
では、テキスト扱いをしていない。このあたりのルールがわからないのですが、参考事例として記録し、今後類似状態時のエラー発生時の対処法の選択枝として記憶しておくことにします。
最初は、comboboxにアルファベットを追加入力する毎にその条件を満たすデータを絞り出し抽出表示させ、そのデータを直接comboboxのリストにしたかったのですが、背伸びしすぎのようです。
また、ご質問させていただくことがあると思います。これからもアドバイスよろしくお願いいたします。
No.5
- 回答日時:
#3です。
デバッグ方法も調べてみてください。
1.Debug.Printを利用する
2.ブレークポイントを利用する
3.クイックウォッチを利用する
など組み合わせて利用すればエラー個所が
特定しやすくなります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Visual Basic(VBA) VBAプログラミング 2 2022/11/27 12:07
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Visual Basic(VBA) Excel VBA メール作成について 本文の中にExcel でコピーした図を上下に2つ 貼り付けを 2 2023/06/14 01:48
- Excel(エクセル) エクセル 値をコピペした時に、条件付き書式で塗られた背景色もペーストさせる 2 2023/04/05 17:21
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) EXCELのVBAについて 2 2023/07/05 17:17
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VC++ (ADO) で Access の Yes/N...
-
select文の実行結果に空白行を...
-
SQLローダーCSV取込で、囲み文...
-
レコードの登録順がおかしい
-
これをSQL文で出来るでしょうか?
-
Oracleで「文字が無効です」の...
-
テーブルの最後(最新)のレコー...
-
count関数の値をwhere句で使用...
-
AccessのSQL文で1件のみヒット...
-
ファイルの漢数字の順番につい...
-
<SQL>重複しているデータの場合...
-
SELECTした合計値をそのまま割...
-
【PL/SQL】FROM区に変数を使う方法
-
アクセスのレポートでレコード...
-
where句中のtrim関数について
-
【SQLサーバ】float型における...
-
Excelの並び替え(文字数と画数...
-
InputBoxを抽出条件にしたSQL文
-
固定長データのテキストファイ...
-
ORMについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VC++ (ADO) で Access の Yes/N...
-
PL/SQLの動的SQLで複数の項目を...
-
VBScriptにて、csvファイルから...
-
一意なID
-
[ADO.NET]Accessの日付型にデー...
-
エラーがよくわからないです
-
PRO*Cでテーブル名にバインド変...
-
SQLローダーCSV取込で、囲み文...
-
単一グループのグループ関数で...
-
select文の実行結果に空白行を...
-
テーブルの最後(最新)のレコー...
-
count関数の値をwhere句で使用...
-
【PL/SQL】FROM区に変数を使う方法
-
SELECT FOR UPDATE で該当レコ...
-
2つの列が同じ値の行を取得するSQL
-
レコードの登録順がおかしい
-
<SQL>重複しているデータの場合...
-
AccessのSQL文で1件のみヒット...
-
アクセスのレポートでレコード...
-
where句中のtrim関数について
おすすめ情報