テキストボックスでフォーム上のレコードを検索、次の検索も
説明
フォーム上に検索用テキストボックスを設置し、そこに入力された「語」を含むレコードを検索してフォームに表示させる。続けて結果表示させるための「次を検索」機能を付ける。
※技術ポイント
- DAOレコードセットでのレコード検索
- Recordset.FindFirst でのレコード検索
- Recordset.FindNext でのカレントレコード以降の検索
作り方
1.使用するフォーム
次の「F_名簿」フォーム行います。名簿フォームには「T_名簿」のテーブルをレコードソースにしてあり、表示のフィールドがあります。
2.検索用コントロールの設置
- フォームをデザインビューで開き、ヘッダ部を表示させます。コントロールを設置するのに使います。高さは2センチが目安です。
- ツールボックスからテキストボックスを一つ、コマンドボタンを二つ、ヘッダ部に設置します。コマンドボタンが二つ必要なのは、 検索されるレコードが複数ありえるからです。一つは最初の検索用に、もう一つは次のレコードを検索するためです。
- 名前も付けておきます。ここでは次のように名付けました。
テキストボックスに「Txt_検索語」、コマンドボタンに「Cmd_検索実行」「Cmd_次を検索」、ボタンの表題もそれぞれ「検索実行」 「次を検索」にします。
3.「検索実行」ボタンに検索機能をつける
※DAOのレコードセットを使います。参照設定で「Microsoft DAO 3.5 Object Liblary」を使えるようにしておいてください。
- ① クリック時イベントのプロシージャを作成します。
(その手順)
ボタン上で右クリックメニューで「イベントのビルド」をクリック、で「ビルダの選択」画面から「コードビルダ」をクリックします。 - 表示されたVBAエディタの作成されたプロシージャに次のようにコードを記述します。
(検索実行ボタンのプロシージャ)
----------------------------------------------------------------------
Private Sub Cmd_検索実行_Click()
'DAOレコードセットを保存する変数宣言
Dim rs As DAO.Recordset
'フォームのレコードセットのコピーを代入
Set rs = Me.RecordsetClone
'テキストボックスの語を含むレコードを検索する(あいまい検索)
rs.FindFirst "[氏名] Like '*" & Me!Txt_検索語 & "*'"
'該当するレコードがない場合の分岐処理
If rs.NoMatch Then
MsgBox "見つかりません"
Else
'レコードセットのブックマークにフォームのレコードを合わせる
Me.Bookmark = rs.Bookmark
End If
'DAOレコードセットを閉じる
Set rs = Nothing
End Sub
----------------------------------------------------------------------
4.「次を検索」ボタンに検索機能をつける
- クリック時イベントのプロシージャを作成します。
- 表示されたVBAエディタの作成されたプロシージャに次のようにコードを記述します。
(次を検索ボタンのプロシージャ)
----------------------------------------------------------------------
Private Sub Cmd_次を検索_Click()
'DAOレコードセットを保存する変数宣言
Dim rs As DAO.Recordset
'フォームのレコードセットのコピーを代入
Set rs = Me.RecordsetClone
'現在のフォームのレコードに合わせる
rs.Bookmark = Me.Bookmark
'テキストボックスの値を含む語を検索する(あいまい検索)
rs.FindNext "[氏名] Like '*" & Me!Txt_検索語 & "*'"
'該当するレコードがない場合の分岐処理
If rs.NoMatch Then
MsgBox "最後まで検索しました"
Else
'レコードセットのブックマークにフォームのレコードを合わせる
Me.Bookmark = rs.Bookmark
End If
'DAOレコードセットを閉じる
Set rs = Nothing
End Sub
----------------------------------------------------------------------
- 機能はこれで完成です。フォームビューで表示して操作し結果を確認してください。
5.その他の調整
付け加えた各コントロールの位置やラベルの調整は行っていません。分かりやすく使いやすい形状に仕上げてください。
テキストボックスのラベル表示は「氏名に含まれる文字を入力」とすると良いでしょう。
(この項終わり)