VBA数组(重读保留和索引)

VBA数组(重读保留和索引),vba,Vba,作为VBA的初学者,我对以下问题感到困惑: Dim DynArray() As Double ReDim DynArray(0 To 0) DynArray(0) = 100 ReDim Preserve DynArray(5 To 5) 'subscript out of range DynArray(5) = 100 为什么它不起作用?如何在VBA中更改数组的上限和/或下限,同时保留原始数组的值? 谢谢。声明 使用“保留”时,只能通过以下方式更改数组的大小: 改变上限;更改下限会导致错

作为VBA的初学者,我对以下问题感到困惑:

Dim DynArray() As Double 
ReDim DynArray(0 To 0)
DynArray(0) = 100
ReDim Preserve DynArray(5 To 5)  'subscript out of range
DynArray(5) = 100
为什么它不起作用?如何在VBA中更改数组的上限和/或下限,同时保留原始数组的值? 谢谢。

声明

使用“保留”时,只能通过以下方式更改数组的大小: 改变上限;更改下限会导致错误

意思是:你只能这样做

ReDim Preserve DynArray(0 To 5)
声明

使用“保留”时,只能通过以下方式更改数组的大小: 改变上限;更改下限会导致错误

意思是:你只能这样做

ReDim Preserve DynArray(0 To 5)
上面的答案是正确的,但我只想补充一些细节

如果使用保留关键字,则只能调整最后一个数组的大小 维度,并且您根本无法更改维度的数量。对于 例如,如果数组只有一个维度,则可以调整该维度的大小 维度,因为它是最后一个也是唯一的维度。但是,如果您的 数组有两个或多个维度,您只能更改 最后一个维度,仍然保留数组的内容。这个 下面的示例显示如何增加最后一个窗口的大小 动态数组的维度,而不删除任何现有数据 包含在数组中

从:

本例使用ReDim语句为动态数组变量分配和重新分配存储空间。它假定选项基数为1

Dim MyArray() As Integer ' Declare dynamic array. 
Redim MyArray(5) ' Allocate 5 elements. 
For I = 1 To 5 ' Loop 5 times. 
 MyArray(I) = I ' Initialize array. 
Next I 
下一条语句调整数组大小并擦除元素

Redim MyArray(10) ' Resize to 10 elements. 
For I = 1 To 10 ' Loop 10 times. 
 MyArray(I) = I ' Initialize array. 
Next I 
                  Redim Preserve MyArray(15) ' Resize to 15 elements. 
下面的语句调整数组的大小,但不删除元素

Redim MyArray(10) ' Resize to 10 elements. 
For I = 1 To 10 ' Loop 10 times. 
 MyArray(I) = I ' Initialize array. 
Next I 
                  Redim Preserve MyArray(15) ' Resize to 15 elements. 
因此,您的错误是:
ReDim Preserve DynArray(5到5)
您更改了下限。

上述答案是正确的,但我只想添加一些细节

如果使用保留关键字,则只能调整最后一个数组的大小 维度,并且您根本无法更改维度的数量。对于 例如,如果数组只有一个维度,则可以调整该维度的大小 维度,因为它是最后一个也是唯一的维度。但是,如果您的 数组有两个或多个维度,您只能更改 最后一个维度,仍然保留数组的内容。这个 下面的示例显示如何增加最后一个窗口的大小 动态数组的维度,而不删除任何现有数据 包含在数组中

从:

本例使用ReDim语句为动态数组变量分配和重新分配存储空间。它假定选项基数为1

Dim MyArray() As Integer ' Declare dynamic array. 
Redim MyArray(5) ' Allocate 5 elements. 
For I = 1 To 5 ' Loop 5 times. 
 MyArray(I) = I ' Initialize array. 
Next I 
下一条语句调整数组大小并擦除元素

Redim MyArray(10) ' Resize to 10 elements. 
For I = 1 To 10 ' Loop 10 times. 
 MyArray(I) = I ' Initialize array. 
Next I 
                  Redim Preserve MyArray(15) ' Resize to 15 elements. 
下面的语句调整数组的大小,但不删除元素

Redim MyArray(10) ' Resize to 10 elements. 
For I = 1 To 10 ' Loop 10 times. 
 MyArray(I) = I ' Initialize array. 
Next I 
                  Redim Preserve MyArray(15) ' Resize to 15 elements. 

<>你的错误:<代码> ReDM保存DyNoRead(5到5)< /C> >你改变了下界。< /P>为什么你的标题是C++,当问题全部是关于VBA?键入错误的名字…但不知道提交后如何修改…抱歉挑剔。。。但现在它在标题中显示的是
Resim
,而不是
ReDim
。你也能解决这个问题吗?如果已经解释了“利维坦”,也许你可以解释你的目标,因为从你的代码看来,不需要改变下界,只要我知道下界,或者任何VBA数组只能是0或1:为什么你的标题是C++,当问题都是关于VBA?键入错误的名字…但不知道提交后如何修改…抱歉挑剔。。。但现在它在标题中显示的是
Resim
,而不是
ReDim
。你也能解决这个问题吗?根据@Leviathan已经解释的内容,也许你可以解释你的目标,因为从你的代码来看,似乎没有必要更改下限。据我所知,下限或任何VBA数组只能是0或1:很好的简短回答。我添加了另一个答案,只是为了添加一些细节。非常感谢!它很有帮助你可以通过点击左边的箭头向上投票你认为有用的任何答案。此外,您可以将最能回答您问题的答案标记为已接受的答案。这向其他读者表明这个答案解决了你的问题。这也为回答者提供了声誉,甚至给你自己带来了一点声誉。如果您想了解StackOverflow的声誉是什么以及它是如何工作的,您可以阅读。很好的简短回答。我添加了另一个答案,只是为了添加一些细节。非常感谢!它很有帮助你可以通过点击左边的箭头向上投票你认为有用的任何答案。此外,您可以将最能回答您问题的答案标记为已接受的答案。这向其他读者表明这个答案解决了你的问题。这也为回答者提供了声誉,甚至给你自己带来了一点声誉。如果您想更多地了解StackOverflow上的声誉是什么以及它是如何工作的,您可以阅读。