2012-10-16 2 views
4

Win7에서 Access 2010을 사용하고 있습니다. 배열을 Dim arrayName()으로 먼저 선언하지 않고 ReDim arrayName(x)을 호출하여 런타임에 배열의 크기를 조절할 수 있음을 발견했습니다.Dimim을 제외한 Redim?

Sub FooBar() 
    ReDim myArray(2) 
    myArray(0) = "This is the first string in myArray." 
    myArray(1) = "This is the second string in myArray." 
    myArray(2) = "And this is the last string in myArray." 
    MsgBox myArray(0) & vbCrLf & myArray(1) & vbCrLf & myArray(2) 
End Sub 

이 바로 가기를 사용하지 않아야하는 이유가 있습니까?

건배!

+0

바로 가기? 'Redim myArray (0)'은'Dim myArray (0)'보다 2 글자 길다. – brettdj

+0

그러나 런타임에 배열의 크기를 동적으로 지정할 수는 없습니다. 컴파일하기 전에 배열 크기를 모를 경우, "Dim myArray()"와 "ReDim myArray (x)'의 'x'는 다음과 같이"가정 "한다고 들었습니다. 배열 크기의 정수/long 값 –

+0

맞습니다. 초기 질문에서 동적 차원 부분을 언급하지 않았습니다. Rogds – brettdj

답변

7

재미 있습니다. 여기에 인용입니다 : This MSDN page은 당신이보고있는 확인합니다. 암시 절차 내에서 배열을 선언하는

"당신은 ReDim 문을 사용할 수 있습니다 당신은을 사용 때 배열의 이름을 잘못 입력하지 않도록주의 ReDim 문 : Option Explicit 문이 모듈에 포함 된 인 경우에도 두 번째 배열이 만들어집니다. "

이 페이지는 Redim 새로운 배열을 만들고 기존 배열이 그것으로 복사된다 (가정 일이)라고 설명 :

질문에 관해서는 http://msdn.microsoft.com/en-us/library/w8k3cys2%28v=vs.80%29.aspx

, 당신은 그것을해야한다, 혼란스럽고 Option Explicit가 포착하지 못하는 오류에 대한 코드를 열지 않기 때문에 안된다고 말하고 싶습니다.

적절히 말해서 Redim Preserve은이 동작을 나타내지 않습니다.

+0

감사합니다. Doug, 문서를 파헤 쳤습니다. 나는 나 자신을 포함하여 누군가를 혼란스럽게하고 싶지 않기 때문에 ** 나는 명시 적'Dim' 문을 추가하려고했다. 그러나'Dim myArray'와'ReDim myArary (x)'를 할 수 있습니다.이 경우 Option Explicit은 "_Subscript out of range_"런타임 오류로부터 나를 보호하지 못합니다. 그래서, 나는'Dim'을 건너 뛰고'ReDim'을 사용하여 배열을 한 번 선언하고 치수를 매기면 실제로 정의되지 않은 변수로부터 더 안전하다고 생각합니다. 그러나, 당신은 legwork을하고 의견을 제안, 그래서 당신의 대답을 받아 들일 것입니다. –

+1

감사! 나는 당신이 여기서 말하는 것과 똑같은 것을 생각하고있었습니다.이 경우에는 Option Explicit이 당신을 보호하지 않을 것이라는 데 동의합니다. 나는 M-Z Tools (http://www.mztools.com/v3/mztools3.aspx)를 실행하고 사용하지 않는 변수가 있는지 알려주는 소스 코드 검토 도구를 사용합니다. 따라서 철자가 틀린 Redim을 잡을 수도 있습니다. 올바른 철자로 Redimmedd를 사용하지 않는다고 가정합니다. 나는이 재미있는 변덕을 불러 일으킨 것에 경의를 표한다. –

관련 문제