我在阵列声明中浪费了两个小时的生命。我现在知道如何避免这个问题,但我想知道这里出了什么问题。我在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在后面的代码中不是数组?
谢谢大家!
答案 0 :(得分:2)
简而言之,如果您坚持在一行上声明倍数,则需要为每个变量指定数据类型:
Dim X(3) As Double, V(3) As Double
如果您未指定数据类型,则VBA假定类型为Variant
。 Variant
可以是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
全部在一行