いちばん失敗した人決定戦

初めて質問させていただきます。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

A 回答 (1件)

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
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

無事にできました。大変助かりました。

お礼日時:2009/12/11 14:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!