【问题标题】:EXCEL VBA Error: "Compile Error: Expected Array"EXCEL VBA 错误:“编译错误:预期的数组”
【发布时间】:2013-06-19 18:40:44
【问题描述】:

谁能帮帮我?

在我的 Excel 工作簿中处理数组时,我遇到了编译错误 (...: "Expected Array")。

基本上,我有一个“母亲”数组(2D,Variant 类型)和四个“婴儿”数组(1D,Double 类型)。被调用的子例程创建公开声明的数组,我的主宏最终将其用于显示目的。不幸的是,最终的婴儿数组无效(给出“编译错误:预期数组”)。奇怪的是,如果我删除了这个最终的婴儿数组('final' - 按照声明/定义的顺序),倒数第二个婴儿数组开始出现问题。

这是我的代码:

 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 出现此“编译错误:预期的数组”问题的原因是什么?

谢谢,

埃利亚斯

【问题讨论】:

  • 在您发布的代码中究竟是哪里出现了错误?
  • 错误光标出现在 SunRaySubRoutine 中的“BabyFour_Array(n) as Double”处

标签: arrays excel vba compiler-errors


【解决方案1】:

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

查看此Chip Pearson page 并向下滚动到“注意使用 One Dim 语句声明的变量”。

在 VBA 中声明如下内容:

Dim x, y, z as Long

只有 z 是 Long,其余的是 Variants。正确的形式是:

Dim x as Long, Y as Long, Z as Long(在你的情况下是双数组。)

您可以看到这将如何导致您描述的行为,即最后一个错误,但其他错误不会。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多