Arrays ReDim保留从索引3开始的数组
我用一个范围填充数组,希望数组中的字段和记录数与实际范围中的字段和记录数相同。Arrays ReDim保留从索引3开始的数组,arrays,excel,vba,multidimensional-array,Arrays,Excel,Vba,Multidimensional Array,我用一个范围填充数组,希望数组中的字段和记录数与实际范围中的字段和记录数相同。 换句话说:如果数组是从A5:D10派生的,myArr(5,2)应该引用B5 Dim myArr As Variant myArr = sht.Range("A3:M" & LRow) 'Redesign array references 'This works ReDim Preserve myArr(1 To LRow -2, 0 To 12) 'This does not wo
换句话说:如果数组是从
A5:D10
派生的,myArr(5,2)
应该引用B5
Dim myArr As Variant
myArr = sht.Range("A3:M" & LRow)
'Redesign array references
'This works
ReDim Preserve myArr(1 To LRow -2, 0 To 12)
'This does not work
ReDim Preserve myArr(3 To LRow, 1 To 13)
下标超出范围
上面的错误消息表明我可能会尝试使用索引越界,但它们与工作索引的大小相同。我做错了什么?在多维数组中,您只能重新设计最后一个数组维度 例如,在多维数组中,您可以
Dim myArr(1 To 10, 1 To 20)
ReDim Preserve myArr(1 To 10, 1 To 25)
但你不能这样做
Dim myArr(1 To 10, 1 To 20)
ReDim Preserve myArr(1 To 15, 1 To 20)
你也不能这样做
Dim myArr(1 To 10, 1 To 20)
ReDim Preserve myArr(1 To 10, 5 To 20)
或
报告的文件说明:
“如果使用Preserve
关键字,则只能调整最后一个数组维度的大小,并且根本无法更改维度的数量。…
类似地,使用
Preserve
时,只能通过更改上限来更改数组的大小;更改下限会导致错误。”
解决这个问题的唯一办法是用新维度定义一个新数组,并使用循环将数据转移到这个新数组中。但是,将一系列值同时加载到数组中的想法
myArr = sht.Range("A3:M" & LRow).Value
完全没有用。实际上,在这种情况下,将前两行不需要的数据加载到数组中也应该比使用循环移动数组快
使用
您可以使用
myArr(5,2)
来引用B5
。将额外的2行加载到数组中也不会有太大区别。在多维数组中,您只能重新设计最后一个数组维度
例如,在多维数组中,您可以
Dim myArr(1 To 10, 1 To 20)
ReDim Preserve myArr(1 To 10, 1 To 25)
但你不能这样做
Dim myArr(1 To 10, 1 To 20)
ReDim Preserve myArr(1 To 15, 1 To 20)
你也不能这样做
Dim myArr(1 To 10, 1 To 20)
ReDim Preserve myArr(1 To 10, 5 To 20)
或
报告的文件说明:
“如果使用Preserve
关键字,则只能调整最后一个数组维度的大小,并且根本无法更改维度的数量。…
类似地,使用
Preserve
时,只能通过更改上限来更改数组的大小;更改下限会导致错误。”
解决这个问题的唯一办法是用新维度定义一个新数组,并使用循环将数据转移到这个新数组中。但是,将一系列值同时加载到数组中的想法
myArr = sht.Range("A3:M" & LRow).Value
完全没有用。实际上,在这种情况下,将前两行不需要的数据加载到数组中也应该比使用循环移动数组快
使用
您可以使用
myArr(5,2)
来引用B5
。将额外的2行加载到阵列中也不会有太大的区别。啊,天哪,我也知道这一点。谢谢你刷新我的记忆,我也知道这一点。谢谢你让我记忆犹新