다음 최소 예제는 Erase
문이 주석 처리 될 때까지 충돌 합니다. 왜?
(이 문서를 찾을 수 없습니다.)
Sub Test()
Dim a1() As Integer
ReDim a1(0 To 2)
Erase a1
Debug.Print a1(1) ' Subscript out of range (Run-time error '9')
Debug.Print LBound(a1) ' Subscript out of range (Run-time error '9')
Debug.Print UBound(a1) ' Subscript out of range (Run-time error '9')
End Sub
나는 교체해야 Erase
와 For i = LBound(a1) to UBound(a1): a1(i) = 0: Next i
?
링크 된 문서에서 :
Erase
동적 배열에서 사용하는 메모리를 해제합니다 . 프로그램이 동적 배열을 다시 참조하기 전에ReDim
명령문 을 사용하여 배열 변수의 차원을 다시 선언해야합니다 .
의 동작은 정적 및 동적 배열에서 Erase
다릅니다 . 정적 배열의 경우 명령은 모든 멤버를 기본값으로 재설정합니다 (숫자의 경우 0, 문자열의 경우 빈 문자열). 동적 배열의 경우 모든 멤버를 제거합니다. 상황은 .Redim
귀하의 경우에는 동적 배열이있는 경우을 사용할 필요가 없습니다 Erase
. 사용 후 배열의 모든 값을 재설정하려면 다른 Redim
문을 실행하기 만하면 됩니다. 크기가 동일하게 유지되는지 여부는 중요하지 않습니다. Redim
키워드와 함께 사용하지 않으면 Preserve
모든 구성원이 기본값으로 생성됩니다. 다음 문이 트릭을 수행합니다.
ReDim a1(LBound(a1) To UBound(a1))
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다