スポンサーリンク

2016年12月10日土曜日

VBAでテーブルのレコード総数を取得し、全レコードを読み取る

Access2013のVBAで、テーブルのレコード総数を取得し、全レコードを読み取ります。

下は読み取り元の顧客名簿テーブルです。
顧客名簿テーブル

[開く]ボタンとレコードデータを表示するテキストボックスを配置した、下のフォームを作成しました。
[開く]ボタンとテキストボックスを配置したフォーム

VBAコードを入力します。
VBAコードを入力する

≪主なコードの説明≫

Dim rs As Recordset : レコードセットを宣言します。
Set rs = CurrentDb.OpenRecordset("T_社員名簿") : テーブルを開きます。
lrec = rs.RecordCount : レコード総数を取得します。
Me!テキスト1 = Null : テキストボックスを空白にします。
For i = 1 To lrec : レコード数だけループします。
Me!テキスト1 = Me!テキスト1 & rs(1) & vbCrLf : vbCrLfで改行します。
rs.MoveNext : 次のレコードへ移動します。
Set rs = Nothing : レコードセットを開放します・

フィールド順に取り出すには、1番目が rs(0) のように0から始まります。

≪実行コード≫

Option Compare Database

Private Sub コマンド0_Click()
    Dim rs As Recordset
    Dim i As Long
    Dim lrec As Long

    Set rs = CurrentDb.OpenRecordset("T_社員名簿")
    lrec = rs.RecordCount
    Me!テキスト1 = Null

    For i = 1 To lrec
        Me!テキスト1 = Me!テキスト1 & rs(0) & " : "
        Me!テキスト1 = Me!テキスト1 & rs(1) & vbCrLf
        rs.MoveNext
     Next
    Set rs = Nothing
End Sub

≪実行結果≫

実行結果のフォームです。
全レコードの[ID]と[社員名]のデータが表示できました。
実行結果のフォーム

≪他のデータベースファイルを開くには≫

下のコードのように、CurrentDbではなくDatabaseオブジェクトを宣言し、他のデータベースファイルを指定します。

Application.CurrentProject.Pathで自分自身が存在するフォルダを取得しています。

Private Sub コマンド0_Click()
    Dim db As Database
    Dim rs As Recordset
    Dim i As Long
    Dim lrec As Long
    Dim sPath As String
  
    sPath = Application.CurrentProject.Path
    If Right(sPath, 1) <> "\" Then
        sPath = sPath & "\"
    End If
    Set db = OpenDatabase(sPath & "商品管理.accdb")
    Set rs = db.OpenRecordset("T_商品マスター")
    lrec = rs.RecordCount
    Me!テキスト1 = Null
  
    For i = 1 To lrec
        Me!テキスト1 = Me!テキスト1 & rs(0) & " : "
        Me!テキスト1 = Me!テキスト1 & rs(2) & vbCrLf
        rs.MoveNext
    Next
    Set rs = Nothing
End Sub

≪他のデータベースファイルから読み取った結果≫

全レコードの[商品ID]と[商品名]のデータが表示できました。
全レコードの[商品ID]と[商品名]のデータ

関連する記事
DAOで全レコードの全フィールドデータを動的配列に格納するVBA
DAOで全レコードのフィールドデータを動的に設定した二次元配列し格納するVBA