是否可以根据VBA中预先存在的变量值声明常量?

时间:2017-12-13 10:50:19

标签: vba multidimensional-array constants

我需要创建一个多维数组,但我不知道数组的高度。 我得到这个值并将其存储在变量中。不幸的是我在声明数组时不能使用变量,我需要使用常量。所以我认为我可以从变量中声明一个常量,但是我在早期的行上得到了相同的错误“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

2 个答案:

答案 0 :(得分:0)

您可以通过简单的方式从Range中读取值而不进行循环:

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

取代范围(" a1:a5"),您可以通过选择或其他方法Selection.ValueActivesheet.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