VBA의 배열에서 빈 값을 제거하려고 할 때 첨자 오류가 발생했습니다.
문제
배열에서 빈 항목을 제거하려면 간단한 수식을 실행하려고합니다.사용중인 배열은 TY라는 Excel에서 설정 한 데이터 테이블의 필드에서로드됩니다.이 필드의 이름은 TY [L3 번호]입니다.데이터 테이블에서 사용자가 추가하거나 삭제할 때이 배열을 동적으로 유지하려고합니다.사용중인 테스트 데이터는 218 행, 210 개의 중복 된 항목 (나중에 제거하려는 경우)과 8 항목의 8 / p>가 있습니다.
매크로를 실행할 때, if 문의 첫 번째 줄에 런타임 오류 9 "범위 밖의 첨자"를 얻을 수 있습니다.
VBA가 나 에게이 오류를주는 이유를 이해하려고 노력하는 몇 시간을 보냈습니다.나의 이해는 전달되는 데이터를 처리하기 위해 배열이 올바르게 크기가 정확하지 않아야한다는 것입니다.디버그 창을 사용하여 두 배열이 모두 올바르게 크기가 지정되어 있는지 확인했습니다.
나는 프로그래밍에 꽤 새로운 것이고, 나 자신을 내가 가르치는 것처럼, 그러나 나는 이것을 내 자신의 해결책을 찾는다.
Sub BuildArray()
' Load array
Dim MyArr()
Dim J As Long
' Size array
MyArr() = Range("TY[L3 Number]")
ReDim NewArr(LBound(MyArr) To UBound(MyArr))
' For Loop to search for Blanks and remove from Array
' The Lbound and UBound parameters will be defined by the size of the TY[L3 Number] field in the TY Table
J = LBound(MyArr) - 1 ' Added this recently while testing the theory that J may start at the 2nd index in the loop, did not help
For i = LBound(MyArr) To UBound(MyArr)
If MyArr(i) <> "" Then ' This is where I error out
J = J + 1
NewArr(J) = MyArr(i)
End If
Next i
ReDim Preserve NewArr(LBound(MyArr) To J)
' Debug Window to show results of revised array.
Dim c As Long
For c = LBound(NewArr) To UBound(NewArr)
Debug.Print NewArr(c)
Next
Debug.Print "End of List"
End Sub
. 해결책
범위는 다차원 배열입니다. (즉, myarray (#, #) 첫 번째 인덱스가 행과 두 번째 열이있는 곳에서 열입니다.
변경
If MyArr(i) <> "" Then
.
~
If MyArr(i,1) <> "" Then
.
범위에 하나의 열만 있으면 두 번째 색인은 항상 1
가됩니다.제휴하지 않습니다 StackOverflow