在VBA中单行声明多个数组

时间:2015-02-25 22:32:42

标签: arrays vba

我在阵列声明中浪费了两个小时的生命。我现在知道如何避免这个问题,但我想知道这里出了什么问题。我在VBA再次成为新人,我想了解我在做什么而不仅仅是做随机编辑直到它起作用......这就是我在这里所做的!

这第一个代码有效:

Public Sub Main()
    Dim X(3) As Double
    Dim V(3) As Double
    Call SimpleFunc(X)
    Debug.Print "Finished!"
End Sub

Private Sub Func1(ByRef X() As Double)
    X(1) = 0.1
    X(2) = 0.2
    X(3) = 0.3
End Sub

但是第二个代码没有(编译错误#34;类型不匹配:数组或用户定义类型预期")。唯一的区别在于X和V的声明。

Public Sub Main()
    Dim X(3), V(3) As Double
    Call SimpleFunc(X)
    Debug.Print "Finished!"
End Sub

Private Sub Func1(ByRef X() As Double)
    X(1) = 0.1
    X(2) = 0.2
    X(3) = 0.3
End Sub

为什么X在后面的代码中不是数组?

谢谢大家!

2 个答案:

答案 0 :(得分:2)

简而言之,如果您坚持在一行上声明倍数,则需要为每个变量指定数据类型:

Dim X(3) As Double, V(3) As Double

如果您未指定数据类型,则VBA假定类型为VariantVariant可以是Array,但是您不应该使用数组表示法:

Dim V(3) As Double
Dim X

X = V ' X is now an array

答案 1 :(得分:1)

你必须指定这两种类型,逻辑上我曾经认为它会起作用,但它没有。

这样做:

Dim X(3) As Double, V(3) As Double

虽然好处是你不必分组类型,你可能会有类似的东西:

Dim X as long, Y as Double, V as Variant, Z(3) as String

全部在一行