VB6입니다 반복하고 COM은 0-와의 혼합 사용 (1)를 기반 인덱싱 (배열은 당신이 옵션 자료로이를 변경하거나 그것들을 선언 할 때를 제외하고 0을 기반으로 명시 적으로).
COM 컬렉션은 일반적으로 이전 COM 개체 모델에서는 1 기반이지만 때로는 0 기반입니다.
희미한/재정의하십시오 데이터 (1 내지 N)은
희미한/재정의하십시오 데이터 (0 N-1) N 1 내지 인덱스 N 소자 어레이 N 0 내지 인덱스 N 요소의 어레이이다 (옵션베이스이면 0) -1
희미한/재정의하십시오 데이터 (N)는 N 0 내지 인덱스 N + 1 개 요소의 배열이다
마지막 경우는 가끔 혼란 한 데이터 (N은)는 일반적으로 N + 1 개 요소의 배열 인 데이터 (0 ~ N)를 의미합니다.
필자는 항상 배열을 (0에서 N-1로) 명시 적으로 선언하고 두 개 이상의 언어를 사용하는 개발자에게 더 익숙한 Option Base에 의존하지 않습니다.
VBA는 길이가 0 인 배열을 지원하지 않으므로 항상 하나 이상의 요소 (다차원 배열의 각 차원에 대해)가 있어야합니다. 따라서 선언 할 수있는 가장 작은 배열은 하나의 요소가있는 데이터 (0에서 0) 또는 데이터 (1에서 1)입니다. 대신
ReDim data(1 To 1)
While Cells(ndx, 1).Value <> vbNullString
ReDim Preserve data(1 To (UBound(data) + 1))
ndx = ndx + 1
Wend
(및 호출의 효율성의 순간 고려 따로 떠나 : 귀하의 경우
, 난 당신이 다음 루프를 통해 요소마다 추가, 하나 개의 요소를 가진 배열을 생성하는 의심 ReDim을 루프에서 보존), 당신은 사용한다 :
ReDim data(1 To 1)
nStartIndex = ndx
While Cells(ndx, 1).Value <> vbNullString
' On the first iteration this does nothing because
' the array already has one element
ReDim Preserve data(1 To ndx - nStartIndex + 1)
ndx = ndx + 1
Wend
출처
2008-10-17 17:42:43
Joe
감사 할 것입니다 필요한 경우이
같은 빈 배열을 정의하는 것, 내가 VBA와의 컬렉션에 대해 잊고 있었던 동적 배열보다 훨씬 더 잘 작동합니다. 그러나 컬렉션을 사용할 때 잔인 함이있을 때 이러한 추가 요소를 표시하지 않으려 고합니다. – rjzii
추가 요소는 무엇입니까? 추가 요소는 없습니다. 컬렉션에 무언가를 추가해야 할 때 미리 크기를 선택할 필요가 없습니다 (생각한 경우). – Tomalak
@Tomalak - 동적 배열에 ReDim Preserve를 사용할 때 컬렉션에 없습니다. – rjzii