有没有一种基于条件初始化公共数组的方法?

时间:2020-08-23 13:32:06

标签: excel vba multidimensional-array

我有一个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的值低于特定水平)初始化数组?

谢谢!

2 个答案:

答案 0 :(得分:4)

  1. ReDim可以用于任何尺寸。 ReDim Preserve被限制为仅修改最后一个尺寸,并保持现有已加载项目的值。但对于ReDim Preserve,也存在一种解决方法:将最后一个维度设为要重新保存的维度,最后转置数组;

  2. ReDim仅可用于声明的数组,但在声明期间不设置尺寸。因此,以另一种方式声明它:

Public MyData() As Double

将根据您的需要工作...

  1. Public变量只能放在声明区域的模块顶部。因此,那里没有任何这样的代码。只有在按照我上面的建议声明的情况下,您才能在模块ReDimSub/Function进行尝试,{

答案 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
相关问题