初めて質問させていただきます。Access勉強中です。
Access VBA 2007 でテーブルのデータを取得した動的配列から、構造体定義した動的配列に入れたいのですが、コンパイルエラーが発生してしまいます。
ネットで調べたのですがわからずじまいで、ここで相談させていただいています。
やりたいことは、テーブルの内容全てを動的配列に入れたい、それだけです。
やり方には固執していませんので、よろしくお願いします。
[コンパイルエラー]
パブリック オブジェクト モジュールで定義されたユーザー定義型に限り、変数に割り当てることができ、実行時バインディングの関数に渡すことができます。
[実際のプログラム]Form内のボタン押下時に実行される
Private Sub btn_Click()
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim varRecords As Variant
Dim intRecCnt As Integer
Set db = CurrentDb()
Set rst = db.OpenRecordset(テーブル名称, dbOpenSnapshot)
rst.MoveLast: rst.MoveFirst
intRecCnt = rst.RecordCount
varRecords = rst.GetRows(intRecCnt)
Dim COutRec() As Record
'行ループ
For intRLoop = 0 To UBound(varRecords, 2)
ReDim Preserve COutRec(intRLoop)
'列方向(フィールド)のループ
For intCLoop = 0 To UBound(varRecords, 1)
'配列の各データを配列にセット
COutRec(intRLoop, intCLoop) = varRecords(intCLoop, intRLoop)
Next intCLoop
Next intRLoop
End Sub
[構造体定義]標準モジュール内に定義している
Type Record
A As String
B As String
End Type
rst で扱うのはフィールド2つだけですよね。
であれば、以下でどうでしょうか。
Type Record
A As String
B As String
End Type
Private Sub btn_Click()
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim varRecords As Variant
Dim intRecCnt As Long
Dim i As Long
Dim COutRec() As Record
Set db = CurrentDb()
Set rst = db.OpenRecordset(テーブル名称, dbOpenSnapshot)
rst.MoveLast: rst.MoveFirst
intRecCnt = rst.RecordCount
varRecords = rst.GetRows(intRecCnt)
rst.Close
Set rst = Nothing: Set db = Nothing
ReDim COutRec(intRecCnt - 1)
'行ループ
For i = 0 To intRecCnt - 1
COutRec(i).A = varRecords(0, i)
COutRec(i).B = varRecords(1, i)
Next
End Sub
お礼
回答ありがとうございます。 無事にできました。大変助かりました。