フォーム上の空いている場所に、性別で検索するための「コンボボックス」を1つ配置する(図5)。コンボボックスの書式は、プロパティシートの「データ」タブにある「値集合ソース」へ「男;女」と指定し、値集合タイプは「値リスト」と指定しておく。ボックス名は「検索性別コンボボックス」と指定しておく。ラベル名は「性別でテーブルを検索」として、ラベルの書式は今までに設定した標準書式でよい。
コントロールの種類 | 名前 |
---|---|
コンボボックス | 検索性別コンボボックス |
続いて、検索性別コンボボックスのためのコードを記述していく。
「検索性別コンボボックス」を選択した状態で、プロパティシート→「イベント」タブをクリックする。「▼」アイコンで[イベントプロシージャ]を選択し、「…」アイコンをクリックするとVBEが開き、
Private Sub 検索性別コンボボックス_Change()
End Sub
のコードが生成される。これをリスト1のコードに書き換える。
Private Sub 検索性別コンボボックス_Change() DoCmd.OpenTable tableName:="顧客管理テーブル", DataMode:=acReadOnly DoCmd.GoToControl ControlName:="性別" DoCmd.FindRecord FindWhat:=検索性別コンボボックス.ItemData(検索性別コンボボックス.ListIndex) Do Dim 確認 As Integer 確認 = MsgBox("次を検索しますか?", vbOKCancel) Select Case 確認 Case 1 DoCmd.FindNext Case 2 Exit Do End Select Loop End Sub
リスト1のコードは、以下のように記述してある。
DoCmd.OpenTableで、検索対象のテーブル(顧客管理テーブル)を読み取り専用モードで開く。書式は下記の通りだ。
名前 | 説明 |
---|---|
acAdd | 新しいレコードを追加できるが、既存レコードの参照/編集はできない |
acEdit | 既存のレコードを参照/編集と、新しいレコードの追加ができる(既定値) |
acReadOnly | 読み取り専用 |
(出典:Office Dev Center「AcOpenDataMode 列挙 (Access)」) |
次に、DoCmd.GotoControlで検索対象のフィールド名を「性別」に指定する。書式は下記の通りだ。
DoCmd.FindRecordで、「検索性別コンボボックス」から選択された性別に合致するレコードを検索する。書式は下記の通りだ。
今回は全て「名前付き引数」で指定している。この他の引数については、下記のURLを参照してほしい。
(参考リンク)Office Dev Center「DoCmd.FindRecord メソッド (Access)」
続いて、Do〜Loopステートメント内で以下の処理を繰り返すよう記述する。
Integer型の変数「確認」を宣言し、Msgboxで「次を検索しますか?」と表示させる。「OK」を選択、つまり、戻り値が「1」ならば、DoCmd.FindNextで、FindRecordメソッドと同じ条件で次のレコードを検索する。「Cancel」を選択、つまり、戻り値が「2」の場合は処理を抜ける。Msgboxの戻り値については下記のURLが参照になる。
(参考リンク)「MsgBox関数の使い方 - アクセス・Access2013」
実行すると、図6のようになる。
次は、「複数の条件に合致するレコード」を検索する機能を追加しよう。
Copyright © ITmedia, Inc. All Rights Reserved.