문제

배열에서 빈 항목을 제거하려면 간단한 수식을 실행하려고합니다.사용중인 배열은 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

가됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top