任何人都可以帮助我吗?
在处理Excel工作簿中的数组时,我遇到了编译错误(...:“Expected Array”)。
基本上,我有一个'母'阵列(2D,Variant类型)和四个'baby'阵列(1D,Double类型)。被调用的子例程创建公开声明的数组,我的主宏最终用于显示目的。不幸的是,婴儿阵列的最后一个出来了(给出了“编译错误:预期数组”)。奇怪的是,如果我删除这个最终的婴儿阵列('最终' - 按照声明/定义的顺序),第二个到最后一个婴儿阵列开始剔除。
这是我的代码:
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
我试图将所有数组声明为Variant类型,但无济于事。我试图给BabyFour_Array()一个不同的名字,但无济于事。
真正奇怪的是,即使我注释掉制作BabyFour_Array()的部分,数组仍然为每个元素都有零值。
有点奇怪的是,第一个婴儿阵列从未挣脱出来(尽管,第二个婴儿阵列已经被淘汰一次(一次可能有30次)。
BANDAID:作为一个临时修复,我只是公开声明了第五个虚拟数组(没有填充或重新标注)。第五个数组除了欺骗系统之外没有实际使用“编译错误:预期数组”。
是否有人知道Excel VBA导致此“编译错误:预期数组”问题是什么?
谢谢,
利亚
答案 0 :(得分:7)
在您的全局声明中,您只是将最后一个婴儿数组声明为Double
。您将前三个声明为Variants
的数组。但是在子程序中,你是Redimming
婴儿一和三作为变形,两和四作为双打。
请参阅此Chip Pearson page并向下滚动至“注意使用一个Dim语句声明的变量。”
在VBA中声明如下内容:
Dim x, y, z as Long
只有z是Long
,其余为Variants
。正确的形式是:
Dim x as Long, Y as Long, Z as Long
(或者你的情况下是双数组。)
您可以看到这会导致您描述的行为,即最后一个错误,但其他错误则不会。