2017-12-13 33 views
0

다차원 배열을 만들어야하지만 배열의 높이를 모르겠습니다. 이 값을 가져 와서 변수에 저장합니다. 불행히도 배열을 선언 할 때 변수를 사용할 수 없기 때문에 상수를 사용해야합니다. 그래서 변수에서 상수를 선언 할 수 있다고 생각했지만 이전 줄에 "Constant Expression Required"라는 동일한 오류가 발생했습니다.VBA에서 기존 변수의 값을 기반으로 상수를 선언 할 수 있습니까?

lr = Tables.Cells(Rows.Count, 1).End(xlUp).Row 

Const constlr As Integer = lr 

Dim TableNamesArr(2 To constlr, 1 To 4) As String 
Dim i As Integer, j As Integer 

For i = 2 To lr 
    For j = 1 To 4 
     TableNamesArr(i, j) = Tables.Cells(i, j).Value 
    Next j 
Next i 

현재 3 문제입니다 라인 - 정수 = LR

으로 헌장의 constlr하지만 난 그 라인을 제거하고 LR 모든 constlr를 변경하는 경우, 그것은 라인 5 - Dim TableNamesArr(2 To lr, 1 To 4) As String은.

Const constlr As Integer = lr  

Const constlr As Integer = 102 
에 : 나는 변경하는 경우

하여 LR, 그것은 정수 또는 상수가 아니라 변수

코드는 잘 작동 정수를 유지 할 문제 필요가있다

+0

코드의 어느 부분에서 오류가 발생합니까? –

+0

현재 3 - Const constlr As Integer = lr 그러나 해당 행을 제거하고 모든 constlr을 lr로 변경하면 행 5 - Dim TableNamesArr (2에서 lr, 1에서 4로) String. lr은 문제이거나 정수 또는 상수 일 필요가 있지만 정수를 포함하는 변수가 아님 –

+0

주 (제목) 질문에 대한 답은 ** 아니요,이 작업을 수행 할 수 없습니다 ** 증명은 귀하의 것입니다 질문과 시험 (마지막 몇 줄). 제 질문은 왜 당신이'lr'을 상수로 설정해야한다고 생각합니까? 상수 정의를 생각해보십시오. 변경되지 않지만 변경하려고하는 것입니다. 그것은 감각을 만들지 않습니다. –

답변

0

간단한 방법으로 루프없이 값을 읽을 수 있습니다.

Dim DirArray As Variant 
DirArray = Range("a1:a5").Value 

범위 ("a1 : a5") 대신 선택 또는 다른 방법 Selection.Value 또는 Activesheet.UsedRange.Value을 사용하여 범위를 참조 할 수 있습니다. 당신의 범위가 테이블에있는 경우

당신은 here에서 도난이 코드를 시도 할 수 있습니다 :

Sub MultiColumnTable_To_Array() 

Dim myTable As ListObject 
Dim myArray As Variant 
Dim x As Long 

'Set path for Table variable 
    Set myTable = ActiveSheet.ListObjects("Table1") 

'Create Array List from Table 
    myArray = myTable.DataBodyRange 

'Loop through each item in Third Column of Table (displayed in Immediate Window [ctrl + g]) 
    For x = LBound(myArray) To UBound(myArray) 
    Debug.Print myArray(x, 3) 
    Next x 

End Sub 
0

당신은하지 희미한에, 재정의하십시오에서 변수를 사용할 수 있습니다. 실제로 이것에 상수는 필요 없습니다.

lr = Tables.Cells(Rows.Count, 1).End(xlUp).Row 
Const constlr As Integer = lr 
Dim TableNamesArr() As String 
Redim TableNamesArr(2 To constlr, 1 To 4) 
Dim i As Integer, j As Integer 
For i = 2 To lr 
    For j = 1 To 4 
     TableNamesArr(i, j) = Tables.Cells(i, j).Value 
    Next j 
Next i