2012-06-28 69 views
1

我创建了一个名为Class1的, 类,并在另一个模块,我想用类这样的ByRef参数:VBA不匹配

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 
+0

您的变量声明只声明'lvl1dm'为Class1:其他变量将是变体。您不能使用逗号作为语句分隔符。你的类方法应该是subs,因为它们不返回任何值。然后从addtochildren调用中删除括号。 Class1代码中“addParent”的定义在哪里? –

+0

哦,谢谢你告诉我,我还没有落入VBA模式......忘记了这个表扬不像JAVA中的表扬。 –

回答

1

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

这是什么意思?

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

您不能用逗号分隔两个语句。你的意思是?

budgeunit.addtochildren lvl1p 
budgeunit.addtochildren lvl1m 

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

另一件事是你使用括号。 subs(和没有预期返回值的函数)的参数不应该被括号包围;在某些情况下,括号会使事情出错。 (如果您使用Call表示法(如果使用Call表示法,您可以不使用这些表示法)。

1

你的变量声明可能做一些不同的东西比你期望的那样。 尝试:

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

在你的宣言,创建Variant类型的两个变量,和类型的Class1的。