(前回の質問に対する回答を受けてエラーを消すことができました。次に検索機能の実装に必要なコードについて質問させてください)
<やりたいこと>
- Excelのユーザーフォームで検索する
- その際はAccessのデータベースを参照する
<ユーザーフォームの操作>
テキストボックスは2つ用意してますが、使用するのは基本的にどちらか1つで、より絞り込んで検索したい場合は2つとも使用する、というふうに考えております。
検索条件は
1つめのテキストボックスに「姓」または「セイ」を入力する
2つめのテキストボックスに「電話番号」を入力する
ということを、また部分一致を想定しています。
このうちのいずれかがデータと一致していたら、検索結果が表示されるようにしたいです。
検索対象フィールドは
「姓」「セイ」「電話番号1」「電話番号2」
というのを想定しています。
リストボックスに表示させたいフィールドが
「顧客コード」「姓」「名」「住所1」「住所2」「電話番号1」「電話番号2」
です。
下記は(書き方を理解できていない)検索条件のコードです…
vba
1If strSQL Like "*" & Me.TextBox1.Value & "*" Or strSQL Like "*" & Me.TextBox2.Value & "*" Then '検索が一致すれば(結果をリストボックスに表示)
前回の質問時にstrSQLはただの文字列なので、LIKEで比較しても検索できないとご指摘いただいています。
自分でも調べてみたのですが、まだ要領がわかっておりません。
検索用のコード全文は下記の通りです。よろしくお願いします。
vba
1'---ユーザーを検索 2Private Sub SearchButton_Click() 3 4' On Error GoTo Err_Handler 'エラーが起きたら"Err_Handler"へ 5 Call ConnectDB 'データベースに接続 6 7 strSQL = "SELECT 顧客コード,姓,名,住所1,住所2,電話番号1,電話番号2 FROM 顧客マスター" '特定のフィールドを抽出 8 adoRs.Open strSQL, adoCn 9 10 If adoRs.BOF = True And adoRs.EOF = True Then 'データがない場合、データベースを切断して終了 11 Call CutDB 12 MsgBox "参照先にデータがありません。" 13 Exit Sub 14 End If 15 16 If strSQL Like "*" & Me.TextBox1.Value & "*" Or strSQL Like "*" & Me.TextBox2.Value & "*" Then '検索が一致すれば(結果をリストボックスに表示) 17 Do Until adoRs.EOF '抽出したレコードが終了するまで繰り返す 18 With Me.SearchList '該当したレコードをリストボックスに表示する 19 .AddItem adoRs.Fields(0).Value 20 End With 21 adoRs.MoveNext 22 Loop 23 Else '検索に一致するものがなければ、データベースを切断して終了 24 Call CutDB 25 MsgBox "一致するデータがありません。" 26 End If 27 28 Call CutDB '検索がすんだら、データベースを切断して終了 29 Exit Sub 30 31Err_Handler: 'エラーが起きたときの飛び先 32 Call CutDB 33 MsgBox Error$ 34 Debug.Print Error$ 35 Debug.Print strSQL 36 37End Sub 38
検索条件は、完全一致ですか、それとも、部分一致ですか。Like "*" & Me.TextBox1.Value & "*" というような条件は部分一致ですが。

回答3件
あなたの回答
tips
プレビュー