ダイナミックアレイでは奇妙な動作があります。 VBAが変数に値を割り当てることを拒否しているようです。コードは次のとおりです。VBAダイナミックアレイでは1つのディメンションしか割り当てられません
Private Sub Report_Load()
Dim db As Database
Dim reportArray() As Variant
Dim structre As Recordset
Dim columns, rows, i As Integer
'Open recordset
Set db = CurrentDb
Set structure = db.OpenRecordset("SELECT * FROM [tblstructure] ORDER BY [Rank]")
'Change array size dynamically
rows = structure.RecordCount
columns = 4
ReDim reportArray(rows, columns)
'Populate array
i = 0
Do Until structure.EOF
reportArray(i, 0) = structure![Name]
i = i + 1
structure.MoveNext
Loop
End Sub
レポートを開くと、下付き文字が範囲外であるというエラーが表示されます。私のコードをデバッグすると、ループのiの値が2であることが分かります。したがって、配列はそれより小さくなければなりません。 rows
変数にカーソルを置くと、その値は1であることがわかります。実際、範囲外のものにアクセスしようとしています。私はサイズの配列を取得(1、4)
ReDim reportArray(structure.RecordCount, columns)
:しかし、奇妙な部分はstructure.RecordCount
の値は、スクリーンショット23 であるということです。 VBAが値 "23"を変数 "行"に割り当てないのはなぜですか、またはReDimが第1次元ではなく第2次元に適切な値を割り当てるのはなぜですか?
を動作するはずです。 – Gustav