我收到错误的"下标超出范围"当我试图将可见单元格的行值(减去标题)添加到数组时。代码下方:
Dim Rng As Range
Dim r As Range
Dim i as Long
Dim arr() As Long
Set Rng = ActiveSheet.UsedRange.Resize(ActiveSheet.UsedRange.Rows.Count - 1, ActiveSheet.UsedRange.Columns.Count).Offset(1, 0).SpecialCells(xlCellTypeVisible)
i = 0
For Each r In Rng.Rows
'Debug.Print r.Row
arr(i) = r.Row
i = i + 1
Next
我忘记了什么吗?我还是VBA的新手,对阵列来说更是如此。
答案 0 :(得分:1)
问题在于,虽然你声明了数组,但你还没有用大小初始化它,所以数组中没有元素,因此下标超出了范围。
您的代码应该阅读,请注意您将遇到的另一个问题是如何解决该范围,我已在下面更正:
Dim Rng As Range, r As Range
Dim i as integer
Dim ary() as Long
Set Rng = ActiveSheet.UsedRange.Resize(ActiveSheet.UsedRange.Rows.Count - 1, ActiveSheet.UsedRange.Columns.Count).Offset(1, 0).SpecialCells(xlCellTypeVisible)
Redim ary(Rng.Rows.Count)
i = 0
For Each r In Rng.Rows
'Debug.Print r.Row
arr(i) = CLng(r.Row)
i = i + 1
Next
这是一个经过测试和运作的例子
答案 1 :(得分:1)
正如已经指出的那样,你必须定义数组。您可以在定义它时给它一个固定的大小(Dim arr(2) as Integer
)。
可以使用ReDim
制作动态范围。使用Preserve
时,它会在重新定义大小时保存数组中的值。 (注意:您只能ReDim
数组的最后一个维度
答案 2 :(得分:1)
这个功能很好......
我没有得到你如何计算范围......但是这个输出只是在范围之外..数组是完全动态的
Sub foo()
Dim Rng As Range
Dim r As Range
Dim i As Long
Dim arr() As Variant
Set Rng = ActiveSheet.UsedRange.Resize(ActiveSheet.UsedRange.Rows.Count - 1, ActiveSheet.UsedRange.Columns.Count).Offset(1, 0).SpecialCells(xlCellTypeVisible)
i = 1
For Each r In Rng.Rows
ReDim Preserve arr(i)
arr(i) = r.Row
Debug.Print arr(i)
i = i + 1
Next
End Sub