プロが教えるわが家の防犯対策術!

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

以上、なにとぞご指示をお願いします。

A 回答 (5件)

コンボボックスにこだわる必要はありません。


結局選択された値はセルに入ります。
name=Worksheets("sheet1").cells(r,c).value
でいいと思います。
    • good
    • 0
この回答へのお礼

アドバイス、ありがとうございます。
私の構文中で、何かが足りないらしく、変数としては取得できませんでした。
今後も、色々試してみようと思います。

お礼日時:2006/02/24 21:06

#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つ以上の必要なパラメ-ターの値が設定されていません」といわれました。
どんどん深みにハマっていきます。
(簡単にできると思うのが間違いなのですけどね)
また、アドバイスお願いいたします。。

補足日時:2006/02/24 20:58
    • good
    • 0

順序だてて考えてみてください。


code変数に'大阪*'をいれたいと仮定します。
(アクセスの任意の文字は*です)
code = "'大阪*'"
大阪を変数に変えたい場合
code = "'" & "大阪" & "*'"
code = "'" & mmcode & "*'"
となりますね。
ただSQL文のほうで''は指定していますので結局
code = mmcode & "*"
でいいかと思います。
    • good
    • 0
この回答へのお礼

 お返事が送れ申し訳ありませんでした。このご回答をいただいてから、変数とテキストのくぎり方を、もう一度整理し直しました。
 基礎が無いから、書籍や皆さんのアドバイスを参考に、必要なエッセンスだけを積み上げて前に進むこの方法は、けして良いことではないのはわかっているのですが、限られた時間の中、前に進むため日々もがいております。でもこのプログラムの世界は、とりあえず保留にして前に進むということが難しく(デバックで一切前に進めない)、またプログラムは、技術と同時にデザインでもあり、事務系の情報収集と違い、参考事例を参考にするのが難しい。苦労しますが、これができれば、日常業務が改善できるので、何とか頑張って行きます。これからもご教授お願いします。
 

お礼日時:2006/03/02 09:59

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

です。
    • good
    • 0
この回答へのお礼

 ご回答頂きありがとうございます。やっと前に進むことができそうです。本当に助かりました。
 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のリストにしたかったのですが、背伸びしすぎのようです。
 また、ご質問させていただくことがあると思います。これからもアドバイスよろしくお願いいたします。

お礼日時:2006/03/02 10:36

#3です。


デバッグ方法も調べてみてください。
1.Debug.Printを利用する
2.ブレークポイントを利用する
3.クイックウォッチを利用する
など組み合わせて利用すればエラー個所が
特定しやすくなります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!