リストボックスにテーブルを表示し、リストからレコードを取得する
  フォーム上に置いたリストボックスにテーブルのデータを表示し、そのリス
トからレコードを選択し、データを取得します。


● 準備 ●

テーブル:【顧客マスタ】
----------------------------------------------------------
フィールド名    データ型        サイズ      (AC97の場合)
----------------------------------------------------------
ID              オートナンバー  (主キー)
氏名            テキスト型      20文字      40バイト
住所            テキスト型      100文字     200バイト
電話番号        テキスト型      13文字      13バイト
----------------------------------------------------------

フォーム:【顧客マスタフォーム】
(1) フォームの新規作成を行い、デザインモードにします。
(2) フォーム上にリストボックスを配置します。
    リストボックスには複数のフィールドを表示しますので、ある程度の幅を
    持たせておくようにして下さい。(9cm以上)
(3) テキストボックスを作成し、[氏名]という名前を付けます。
(4) コマンドボタンを作成し、[Command1]という名前を付けます。


● サンプル ●

  フォームロード時、コマンドボタンクリック時にそれぞれ以下のプロシージャ
を記述します。

Private Sub Form_Load()
    'リストボックスのプロパティ設定
    With Me.リスト0
        .RowSource = "Select * From 顧客マスタ Order By ID"
        .ColumnCount = 4
        .ColumnWidths = "0.5cm;2.0cm;2.5cm;4.0cm"
        .ColumnHeads = True
        .SetFocus
    End With
End Sub

Private Sub コマンド2_Click()
    Dim intListIdx As Integer       'リストインデックス格納
    Dim Rst        As DAO.Recordset 'レコードセット

    '選択されたリストインデックスの取得
    intListIdx = Me.リスト0.ListIndex

    If intListIdx = -1 Then
        MsgBox "リストボックスの値を選択してください"
        Me.リスト0.Selected(1) = True
        Exit Sub
    End If

    'リストボックスのRowSourceを元にレコードセット作成
    Set Rst = CurrentDb.OpenRecordset(Me.リスト0.RowSource)

    'レコードセットの移動
    Rst.MoveFirst
    Rst.Move intListIdx

    'テキストボックスにレコードセットの値を代入
    Me.氏名 = Rst!氏名

    '終了処理
    Rst.Close
    Set Rst = Nothing
End Sub


● 詳細 ●

  フォームロード時には、リストボックスのプロパティを設定しています。
  RowSource/値集合ソースを指定することにより、テーブルのデータをリスト
ボックスに表示することが出来ます。
  そして、各フィールドを表示できるよう、ColumnCount/列数プロパティをフィー
ルドと同数設定し、列幅を設定するためにColumnWidthsを使っています。
  似たプロパティにColumnWidthがありますが、これはデータシートビューの
列幅を一括で変更するものですので、注意が必要です。


  コマンドボタンがクリックされた時には、選択されたリスボックスを判別し
て、それに応じたレコードセットの[氏名]フィールドを表示しています。
  その際にリストから取得できるのはListIndexだけですので、リストボックス
に表示されているデータと同じ並び順のレコードセットを取得します。そして、
リストインデックスと同じ数だけレコードセット(カーソル)を移動します。
  また、リストインデックスは0から始まりますので、最初のレコードが選択さ
れていた場合にはレコードを0移動することになり、結果正しいレコードを取得
することが出来ます。


● 補足説明 ●

  Access2000の場合、デフォルトではDAOに参照設定されていません。
  Visual Basic Editor(VBE)を開き、メニューの[ツール]−[参照設定]から、
Microsoft DAO 3.6 Object Libraryにチェックを入れて下さい。
  その際にMicrosoft ActiveX Data Object 2.1 Libraryよりも上に、DAOの
チェックを持ってきて下さい。

Access97/2000



戻る


Excel Word Access VBA! モーグ