【问题标题】:VBA array (ReDim Preserve & Indexing)VBA 数组(ReDim 保留和索引)
【发布时间】:2016-05-08 08:35:35
【问题描述】:

作为 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 的时候,为什么你的标题会说 C++?
  • 输入错误的名称....提交后不知道如何修改...
  • 抱歉我很挑剔...但现在标题中显示的是Resim,而不是ReDim。你也能解决这个问题吗?
  • 鉴于@Leviathan 已经解释过的内容,也许您可​​以解释您的目标,因为从您的代码看来似乎没有必要更改下限
  • 据我所知下限或任何 VBA 数组只能是 0 或 1:msdn.microsoft.com/en-us/library/aa266179(v=vs.60).aspx

标签: vba


【解决方案1】:

The documentation 声明

当你使用 Preserve 时,你只能通过 改变上限;更改下限会导致错误。

意思:你只能做

ReDim Preserve DynArray(0 To 5)

【讨论】:

  • 很好的简短回答。我添加了另一个答案只是为了添加一些细节。
  • 非常感谢!很有帮助
  • 您可以通过单击左侧的箭头来为您认为有帮助的任何答案投票。此外,您可以将最能回答您的问题的答案标记为已接受答案。这向其他读者表明此答案解决了您的问题。它还为回答者甚至为您自己提供了声誉。如果您想了解更多关于 StackOverflow 上的声誉及其运作方式的信息,可以阅读 stackoverflow.com/help/whats-reputation
【解决方案2】:

上面的答案是正确的,但我只是想补充一些细节。

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

来自documentation

本示例使用 ReDim 语句为动态数组变量分配和重新分配存储空间。它假设 Option Base 为 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 Preserve DynArray(5 To 5) 你改变了下限。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 2015-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多