2017-09-07 3 views
0

다차원 배열과 Redim Preserve가있는 또 다른 주제는 알고 있습니다. 나는 그것들을 많이 읽었지 만 여전히 왜 내 코드가 작동하지 않는지 이해할 수 없다.Redim Preserve (2D 배열)의 문제

마지막 차원 만 확장 할 수 있으며 원하는대로 선택할 수 있습니다. 2D 배열에 새 열을 추가하십시오. 이것은 나에게 오류를 제공

Sub test_Redim_Preserve() 

Dim arr() As Variant 

ReDim arr(10, 10) 
ReDim Preserve arr(UBound(arr,1), UBound(arr,2) + 1) 

End Sub 

이 잘 작동

Sub test_Redim_Preserve2() 

Dim arr() As Variant 

ReDim arr(10, 10) 
arr = Range("A1:J10") 
ReDim Preserve arr(UBound(arr,1), UBound(arr,2) + 1) 

End Sub 

: 문제를 격리하기 위해

, 나는이 코드를 테스트합니다. 방금 ​​배열을 채울 범위를 준 다음 Redim 할 수 없습니다. Redim을 받아들이 기 위해 무엇이 빠졌는지 이해하지 못합니다.

누군가 나를 설명 할 수 있습니까?

답변

2

반대로 Option Base 문이없는 경우 기본 하한은 0이지만 배열에 범위를 지정합니다. 항상 하한이 1이므로 코드에서 실제로 크기를 조정하려고합니다. 배열의 첫 번째 차원 역시 하한을 변경합니다. 당신은 당신의 코드 상단에 Option Base 1을 사용할 수 있습니다

ReDim Preserve arr(1 To UBound(arr, 1), 1 To UBound(arr, 2) + 1) 
+0

좋아, 지금은 이해합니다. 내 범위의 첫 번째 값은 arr (0,0)으로 이동하지만 arr (1,1)은 대신 ​​사용한다고 생각했습니다. 귀하의 설명과 해결책을 가져 주셔서 감사합니다. –

2

한 다음 원래의 코드는 잘 작동합니다 : 사용합니다.

전체 코드 :

Option Base 1 

Sub test_Redim_Preserve2() 

Dim arr() As Variant 

ReDim arr(10, 10) 
arr = Range("A1:J10") 
ReDim Preserve arr(UBound(arr, 1), UBound(arr, 2) + 1) 

End Sub 
+0

해결책을 주셔서 감사합니다. –