VBA byref参数不匹配

时间:2012-06-28 18:33:05

标签: class vba byref

我创建了一个名为Class1的类, 在另一个模块中,我想使用这样的类:

Dim budgeunit As Class1

Sub Creattree()
    Dim lvl1p, lvl1m, lvl1dm As Class1

    Set lvl1p = New Class1
    lvl1p.setName ("pear")
    Set lvl1m = New Class1
    lvl1m.setName ("Mango")

    Set budgeunit = New Class1

    budgeunit.addtochildren (lvl1p), budgeunit.addtochildren(lvl1m)
End Sub

但是当我编译它时,它会突出显示budgeunit.addtochildren(lvl1m) 并说Byref论证不匹配。 我已经宣布了所有的论点,我不知道为什么会这样。 类代码:

Dim Children() As Class1
Dim Parent() As Class1
Public level As Integer
Public name As String
Function setName(nm As String)
    name = nm
End Function

Function addtochildren(node As Class1)
    num = Children.Count
    ReDim Children(num + 1) As String
    Children(num) = node
    node.addParent (Me)
End Function

2 个答案:

答案 0 :(得分:1)

您对变量的声明可能与您预期的不同。 尝试:

Sub Creattree() 
    Dim lvl1p as Class1, lvl1m as Class1, lvl1dm As Class1

在声明中,您创建两个Variant类型的变量,类型为Class1。

答案 1 :(得分:1)

Stefan的回答是正确的,但也有其他问题。

这是什么意思?

budgeunit.addtochildren (lvl1p), budgeunit.addtochildren(lvl1m)

你不能用这样的逗号分隔两个语句。你是说这个吗?

budgeunit.addtochildren lvl1p
budgeunit.addtochildren lvl1m

此外,您应该修改函数的使用,并可能用Subs替换它们。你不期待它们的任何输出,所以......

另一件事是你使用括号。 sub(和没有预期返回值的函数)的参数不应该用括号括起来;在某些情况下,括号会使事情出错。 (如果使用Call符号,则使用某些限定条件,但不是。{/ p>