Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays ReDim保留从索引3开始的数组_Arrays_Excel_Vba_Multidimensional Array - Fatal编程技术网

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行加载到阵列中也不会有太大的区别。

啊,天哪,我也知道这一点。谢谢你刷新我的记忆,我也知道这一点。谢谢你让我记忆犹新