我需要创建一个多维数组,但我不知道数组的高度。 我得到这个值并将其存储在变量中。不幸的是我在声明数组时不能使用变量,我需要使用常量。所以我认为我可以从变量中声明一个常量,但是我在早期的行上得到了相同的错误“Constant Expression Required”。
sprintf
目前第3行是问题 - Const constlr As Integer = lr
但如果我删除该行并将所有constlr更改为lr,那么它是第5行 -
Bands(t) = {sprintf('Band %d', t)}; % >> output 'Band 1' when t=1
% or
% Bands{t} = sprintf('Band %d', t);
。
lr是问题,它需要是整数或常量,但不是包含整数的变量
如果我改变,代码可以正常工作:
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
到
Dim TableNamesArr(2 To lr, 1 To 4) As String
答案 0 :(得分:0)
您可以通过简单的方式从Range中读取值而不进行循环:
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
答案 1 :(得分:0)
您可以在Redim中使用变量,而不是在Dim中。你实际上并不需要常量。
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