Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.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
Vba 填充后的Redim数组_Vba_Excel - Fatal编程技术网

Vba 填充后的Redim数组

Vba 填充后的Redim数组,vba,excel,Vba,Excel,在填充数组之前,我不知道它会有多大,但在某个特定点(插入所有数据后),我希望重新分配数组,以便数组末尾没有空值。如果我把它调暗 valuesForSix() As Double 我无法使用添加值 valuesForSix(0) = 9.654 有人能帮我吗?再打一次 Dim valuesForSix() As Double ReDim valuesForSix(1) As Double valuesForSix(0) = 9.654 valuesForSix(1) = 10.25 ReDim

在填充数组之前,我不知道它会有多大,但在某个特定点(插入所有数据后),我希望重新分配数组,以便数组末尾没有空值。如果我把它调暗

valuesForSix() As Double
我无法使用添加值

valuesForSix(0) = 9.654
有人能帮我吗?

再打一次

Dim valuesForSix() As Double
ReDim valuesForSix(1) As Double
valuesForSix(0) = 9.654
valuesForSix(1) = 10.25
ReDim Preserve valuesForSix(10) As Double
Debug.Print valuesForSix(0)
Debug.Print valuesForSix(1)
“Preserve”关键字表示,如果阵列大小增加,则保留现有数据。

ReDim it

Dim valuesForSix() As Double
ReDim valuesForSix(1) As Double
valuesForSix(0) = 9.654
valuesForSix(1) = 10.25
ReDim Preserve valuesForSix(10) As Double
Debug.Print valuesForSix(0)
Debug.Print valuesForSix(1)

“Preserve”关键字表示如果数组大小增加,则保留现有数据。

您可以使用
ReDim Preserve
重新定义数组的维度。
Preserve
关键字表示数组保留所有现有数据。有关详细信息,请参阅

本例初始化一个空数组,然后从1到10循环,每次添加一个额外的元素:

Dim v() As Double, i As Long
For i = 1 To 10
    ReDim Preserve v(1 To i) As Double
    v(i) = i
Next i
' v = [1 2 3 4 5 6 7 8 9 10]
您可以使用
LBound
UBound
通过
n
元素扩展数组:

Dim v(0 To 10) As Double, n As Long
n = 7
ReDim Preserve v(LBound(v) To UBound(v) + n)
' Now v is Double(0 to 17)

您可以使用
ReDim Preserve
重新定义阵列的维度。
Preserve
关键字表示数组保留所有现有数据。有关详细信息,请参阅

本例初始化一个空数组,然后从1到10循环,每次添加一个额外的元素:

Dim v() As Double, i As Long
For i = 1 To 10
    ReDim Preserve v(1 To i) As Double
    v(i) = i
Next i
' v = [1 2 3 4 5 6 7 8 9 10]
您可以使用
LBound
UBound
通过
n
元素扩展数组:

Dim v(0 To 10) As Double, n As Long
n = 7
ReDim Preserve v(LBound(v) To UBound(v) + n)
' Now v is Double(0 to 17)

签出
Redim Preserve
。签出
Redim Preserve
。此处值得注意的是:Redim Preserve仅适用于数组的最高维度。因此,例如,如果数组是
ValueForSix(1,1)
,这将不起作用。这种方法确实满足了OP的需求,但不可避免地会有另一个用户出现,并想知道为什么它对他们不起作用:)。(为了澄清,我在这里并不是说这个答案需要更改。我只是留下一个注释。)这里值得注意的是:Redim Preserve只在数组的最高维度上工作。因此,例如,如果数组是
ValueForSix(1,1)
,这将不起作用。这种方法确实满足了OP的需求,但不可避免地会有另一个用户出现,并想知道为什么它对他们不起作用:)。(为了澄清,我在这里并不是说这个答案需要改变。我只是留个便条。)