我有一个3维的数组。我想从Excel VBA中的几个模块访问此数组。因此,我使用Public进行声明。目前,我使用以下代码:
Public MyData(1 To 400, 1 To 10, 1 To 3000) As Double
我想在代码启动时一次初始化第一个和第三个变量,具体取决于数据大小。
由于ReDim仅可用于数组中的最后一个变量,所以我试图做这样的事情,尽管这是不可能的:
If x < 400 and z < 3000 Then
Public MyData(1 To 400, 1 To 10, 1 To 3000) As Double
End If
If x < 200 and z < 1000 Then
Public MyData(1 To 200, 1 To 10, 1 To 1000) As Double
End If
有没有一种方法可以根据条件(x和z的值低于特定水平)初始化数组?
谢谢!
答案 0 :(得分:4)
ReDim
可以用于任何尺寸。 ReDim Preserve
被限制为仅修改最后一个尺寸,并保持现有已加载项目的值。但对于ReDim Preserve
,也存在一种解决方法:将最后一个维度设为要重新保存的维度,最后转置数组;
ReDim
仅可用于声明的数组,但在声明期间不设置尺寸。因此,以另一种方式声明它:
Public MyData() As Double
将根据您的需要工作...
Public
变量只能放在声明区域的模块顶部。因此,那里没有任何这样的代码。只有在按照我上面的建议声明的情况下,您才能在模块ReDim
中Sub/Function
进行尝试,{1>
答案 1 :(得分:1)
这是一个典型的ReDim
示例:
Public multiArray()
Sub initL()
Dim larry As Long, moe As Long, curley As Long
larry = 7
moe = 11
curley = 13
ReDim multiArray(1 To larry, 1 To moe, 1 To curley)
End Sub