Excel 用可见单元格的行填充动态数组
当我试图向数组中添加可见单元格(减去标题)的行值时,出现了“下标超出范围”的错误。代码如下:Excel 用可见单元格的行填充动态数组,excel,vba,Excel,Vba,当我试图向数组中添加可见单元格(减去标题)的行值时,出现了“下标超出范围”的错误。代码如下: 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).Spe
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还是新手,对数组更是如此。问题是,尽管您正在声明数组,但尚未使用大小对其进行初始化,因此数组中没有元素,因此下标超出了范围 您的代码应为,注意,您将遇到的另一个问题是如何解决该范围,我已更正如下:
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
这是一个经过测试的工作示例问题在于,尽管您正在声明数组,但尚未使用大小对其进行初始化,因此数组中没有元素,因此下标超出了范围 您的代码应为,注意,您将遇到的另一个问题是如何解决该范围,我已更正如下:
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
这是一个经过测试的工作示例如前所述,您必须定义数组。您可以在定义它时给它一个固定的大小(
Dim arr(2)为整数)
动态范围可以使用。使用Preserve
可在重新定义大小时将值保存在数组中。(注意:您只能ReDim
数组的最后一个维度)如前所述,您必须定义数组。您可以在定义它时给它一个固定的大小(Dim arr(2)为整数)
动态范围可以使用。使用Preserve
可在重新定义大小时将值保存在数组中。(注意:您只能ReDim
数组的最后一个维度)此函数工作正常
我不知道你是怎么计算射程的。。。但是这个输出只是超出了范围。。数组是完全动态的
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
此函数工作正常
我不知道你是怎么计算射程的。。。但是这个输出只是超出了范围。。数组是完全动态的
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
您必须初始化数组。如果没有它,引用任何元素都会出现此错误。您必须初始化数组。如果没有它,引用任何元素都会出现此错误。我尝试使用ReDim
作为ReDim-arr(1到(ActiveSheet.AutoFilter.Range.SpecialCells(xlCellTypeVisible.Count/ActiveSheet.AutoFilter.Range.Columns.Count-1))
但我收到了相同的错误。您的索引I
从0
开始,数组的定义范围是从1到…
我尝试使用ReDim
作为ReDim-arr(1到(ActiveSheet.AutoFilter.Range.SpecialCells(xlCellTypeVisible.Count/ActiveSheet.AutoFilter.Range.Columns.Count-1))
但是我收到了相同的错误。您的索引I
从0开始,数组的定义范围是从1到…
我尝试使用Dim arr(Rng.Rows)作为Long
,但我遇到另一个错误:“需要常量表达式”重新发布代码,如果添加新的内容,则说明您做错了什么。我尝试使用Dim arr(Rng.Rows)作为Long
,但我遇到另一个错误:“需要常量表达式”重新发布您的代码,使用新添加的代码,您正在做一些错误的事情。是的,它与ReDim Preserve arr(i)
在中正常工作,用于。。。下一步
。非常感谢。为了回答您关于如何计算范围的问题,我将使用UsedRange
并在可见单元格上调整其大小(SpecialCells(xlCellTypeVisible)
)。我在互联网上的另一篇帖子上找到了这段代码,内容是关于可见单元格的选择。很高兴能提供帮助:)是的,它可以与中的ReDim PREVICE arr(I)
配合使用。。。下一步
。非常感谢。为了回答您关于如何计算范围的问题,我将使用UsedRange
并在可见单元格上调整其大小(SpecialCells(xlCellTypeVisible)
)。我在互联网上的另一篇帖子上找到了这段代码,内容是关于可见单元格的选择。很高兴为您提供帮助:)