동적 배열에 이상한 동작이 있습니다. VBA가 변수에 값을 할당하는 것을 거부하는 것처럼 보입니다. 다음은 코드입니다.VBA 동적 배열은 하나의 차원 만 할당합니다.
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이 첫 번째가 아닌 두 번째 차원에 올바른 값을 할당하는 이유는 무엇입니까?
당신은'GetRows()는 DAO.Recordset의'방법을 연구해야 작동합니다. – Gustav