ここでは抽出し対象レコードを表示するのではなく、純粋に検索するフォームを作成します。
フォームデザインで、テーブルがソースのサブフォーム・検索文字を入力するテキストボックス・検索を開始するボタンを配置し、レコードを総当たりで検索します。
関連する「テーブル レコードの検索と置換の方法:問題5 - Access練習問題」も参照してください。
検索対象のテーブルがあるデータベースファイルを使用します。
リボンの[作成]~[フォーム デザイン]をクリックしフォームを作成します。
リボンの[フォーム デザイン ツール]~[デザイン]で、[サブフォーム/サブレポート]を選択しフォーム上に配置します。
サブフォーム ウィザードが開始します。
[既存のテーブルまたはクエリを使用する]を選択し[次へ]ボタンをクリックします。
テーブル又はクエリを選択し、表示するフィールドを指定します。
ここでは「商品テーブル」を選択し、全フィールドを指定しました。
サブフォームの名前を入力し完了です。
フォームビューを実行すると、サブフォームに指定したテーブルが表示されます。
フォームの上に、リボンの[フォーム デザイン ツール]~[デザイン]から、[テキストボックス]と[コマンドボタン]を配置し、テキストボックスのラベルを「商品名」、ボタンの表示を「検索」に変更します。
検索ボタンを選択した状態で、プロパティシートの[イベント]タブ~[クリック時]イベントを[イベント プロシージャ]にし、[…]ボタンをクリックします。
VBE画面が開くので下記のコードを入力します。
実行順は下記の通りです。
Option Compare Database
Option Explicit
Private Sub コマンド4_Click()
Dim bFind As Boolean
If Nz(Me!テキスト2, "") = "" Then
MsgBox ("検索文字列を入力してください")
Me!テキスト2.SetFocus
Exit Sub
End If
Me![Sub商品マスター].SetFocus
Err.Number = 0
DoCmd.GoToRecord , , acFirst
bFind = False
On Error Resume Next
Do
Me![Sub商品マスター].SetFocus
If Me!テキスト2 = Me![Sub商品マスター]![商品名] Then
bFind = True
Exit Do
End If
Err.Number = 0
DoCmd.GoToRecord , , acNext
If Err.Number > 0 Then
Exit Do
End If
Loop
If bFind = True Then
MsgBox "商品ID:" & Me![Sub商品マスター]![商品ID] & " に見つかりました。"
Else
MsgBox "見つかりませんでした。"
End If
End Sub
見つかれば、サブフォームで見つかったレコードが反転表示され、見つかったIDとメッセージが表示されます。
見つからなけらば、サブフォームは最終の新規レコード位置に移動し、メッセージが表示されます。
関連リンク
SQL INSTR関数で文字列を検索し最初に見つかった文字位置を返す
Recordsetで文字列を検索する
クエリ : あ行で始まるデータを抽出する
指定した条件以外のレコード抽出するクエリ
重複データを抽出する
フォームデザインで作成する
ボタンでフォームを開くVBAコード