我自己碰到这个路障时偶然发现了这个问题。我最终写了一段代码来快速处理ReDim Preserve
一个新大小的数组(第一个或最后一个维度)。也许它会帮助其他面临同样问题的人。
因此,对于用法,假设您的数组最初设置为 MyArray(3,5)
,并且您想让尺寸(首先!)更大,让我们说MyArray(10,20)
。你会习惯做这样的事情吗?
ReDim Preserve MyArray(10,20) '<-- Returns Error
但不幸的是,这会返回错误,因为您试图更改第一个维度的大小。因此,使用我的功能,您只需执行以下操作:
MyArray = ReDimPreserve(MyArray,10,20)
现在数组变大了,数据也被保留了。您ReDim Preserve
的多维数组已完成。:)
最后但并非最不重要的是,神奇的功能:ReDimPreserve()
'redim preserve both dimensions for a multidimension array *ONLY
Public Function ReDimPreserve(aArrayToPreserve,nNewFirstUBound,nNewLastUBound)
ReDimPreserve = False
'check if its in array first
If IsArray(aArrayToPreserve) Then
'create new array
ReDim aPreservedArray(nNewFirstUBound,nNewLastUBound)
'get old lBound/uBound
nOldFirstUBound = uBound(aArrayToPreserve,1)
nOldLastUBound = uBound(aArrayToPreserve,2)
'loop through first
For nFirst = lBound(aArrayToPreserve,1) to nNewFirstUBound
For nLast = lBound(aArrayToPreserve,2) to nNewLastUBound
'if its in range, then append to new array the same way
If nOldFirstUBound >= nFirst And nOldLastUBound >= nLast Then
aPreservedArray(nFirst,nLast) = aArrayToPreserve(nFirst,nLast)
End If
Next
Next
'return the array redimmed
If IsArray(aPreservedArray) Then ReDimPreserve = aPreservedArray
End If
End Function
我在 20 分钟内写了这篇文章,所以不能保证。但是,如果您想使用或扩展它,请随意。我原以为有人已经在这里有了这样的代码,显然不是。所以在这里你去齿轮头。