2013-06-22 80 views
2

任何人都可以帮助我吗?在我的Excel工作簿阵列打交道时:(“预期阵” ......)EXCEL VBA错误:“编译错误:预期阵列”

我已经得到一个编译错误。

基本上,我有一个“母亲”阵列(二维,变异型)和四个“婴儿”阵列(1D,双型)。被调用的子程序创建公共声明的数组,我的主宏最终用于显示目的。不幸的是,婴儿阵列的最后阶段(给出了“编译错误:预期数组”)。奇怪的是,如果我删除了这个最后的婴儿数组(最后一个 - 按照声明/定义的顺序),倒数第二个婴儿数组开始退出。

这里是我的代码:

Public Mother_Array() as Variant, BabyOne_Array(), BabyTwo_Array(), BabyThree_Array(), BabyFour_Array() as Double 'declare may other variables and arrays, too 

Sub MainMacro() 
    'do stuff 

    Call SunRaySubRoutine(x, y) 

    'do stuff 

    Range("blah") = BabyOne_Array: Range("blahblah") = BabyTwo_Array 
    Range("blahbloh" = BabyThree_Array: Range("blahblue") = BabyFour_Array 

End Sub 

Sub SunRaySubRoutine(x,y) 
    n = x * Sheets("ABC").Range("A1").Value + 1 

    ReDim Mother_Array(18, n) as Variant, BabyOne_Array(n), BabyTwo_Array(n) as Double 
    ReDim BabyThree_Array(n), BabyFour_Array(n) as Double 

    'do stuff 

    For i = 0 to n 

     BabyOne_Array(i) = Mother_Array(0,i) 
     BabyTwo_Array(i) = Mother_Array(2,i) 
     BabyThree_Array(i) = Mother_Array(4,i) 
     BabyFour_Array(i) = Mother_Array(6,i) 
    Next   

End Sub 

我曾尝试申报所有阵列的变型,但无济于事。我试图给BabyFour_Array()一个不同的名字,但无济于事。

什么是真正奇怪的是,即使我注释掉这使得BabyFour_Array()的一部分,该阵列仍然有每个元素零个值。

什么也有点蹊跷的是,第一个孩子阵列从不掷骰子出来(虽然,第二届一个crapped了一次(一次出来的也许30)

绷带:作为一个临时的解决办法,我只是公开地声明了第五个虚拟数组(没有被填充或重新定义尺寸),第五个数组没有实际使用,除了欺骗系统而没有“编译错误:期望数组”之外的其他数组。

有谁知道是什么原因造成的用Excel VBA问题

谢谢,

:这个 “预期阵列编译错误”?

Elias

+1

在你发布的代码中,你会发现错误? –

+0

错误光标出现在SunRaySubRoutine的“BabyFour_Array(n)Double”中 – Elias

回答

7

在您的全局声明中,您只声明最后一个婴儿数组为Double。你声明前三个为Variants的数组。但在子程序中,您是Redimming的婴儿,其中一个和三个为变体,两个和四个为双精度。

看到这个Chip Pearson page并向下滚动到“注意用一个声明声明的变量”。

在VBA在声明是这样的:

Dim x, y, z as Long 

只有z是Long,其余均为Variants。正确的方式是:

Dim x as Long, Y as Long, Z as Long(或双阵列在你的情况。)

你可以看到这是如何导致您所描述的行为,即最后一个错误,但别人不一样。