スポンサーリンク

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

2016年12月8日木曜日

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

Access2013でDAOを使用し、全レコードのフィールドデータを、動的に設定した二次元配列し格納するVBAです。

取出し元の、顧客先名簿テーブルです。
このテーブルから、担当者名と住所を格納します。
顧客先名簿テーブル

ボタンをクリックすると、VBAを開始するフォームを作成しました。
VBAを開始するフォーム

作成したVBAコードです。

Dim rs As Recordset : レコードセットを宣言
Dim myArray() As Variant : 配列を宣言

Set rs = CurrentDb.OpenRecordset("T_納品先名簿") : テーブルを開きます
ReDim myArray(rs.RecordCount - 1, 1) : 動的に二次元配列を設定

Do Until rs.EOF : レコード終了までループします
myArray(i, 0) = rs(1) : 担当者名を配列に格納
myArray(i, 1) = rs(3) : 住所を配列に格納

rs.MoveNext : 次のレコードへ移動

作成したVBAコード

Option Compare Database

Private Sub コマンド0_Click()
    Dim rs As Recordset
    Dim myArray() As Variant
    Dim i As Long
   
    Set rs = CurrentDb.OpenRecordset("T_納品先名簿")
    ReDim myArray(rs.RecordCount - 1, 1)
    i = 0
   
    Do Until rs.EOF
        myArray(i, 0) = rs(1)
        myArray(i, 1) = rs(3)
        i = i + 1
        rs.MoveNext
    Loop
    Set rs = Nothing
End Sub

動的配列にフィールドデータを格納した結果を、ウォッチ式で見た画面です。
ウォッチ式で見た画面
関連する記事
DAOで全レコードの全フィールドデータを動的配列に格納するVBA
ADOを使う