【问题标题】:VBA byref argument mismatchVBA byref 参数不匹配
【发布时间】:2012-06-30 08:07:31
【问题描述】:

我创建了一个名为 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

【问题讨论】:

  • 您的变量声明仅将lvl1dm 声明为 Class1:其他变量将是变体。您不能使用逗号作为语句分隔符。您的类方法应该是 subs,因为它们不返回任何值。然后从 addtochildren 调用中删除括号。您的 Class1 代码中“addParent”的定义在哪里?
  • 哦,谢谢你告诉我,我还没有进入VBA模式...忘记了comment不像JAVA中的command。

标签: class vba byref


【解决方案1】:

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

这是什么意思?

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

您不能像这样用逗号分隔两个语句。你是这个意思吗?

budgeunit.addtochildren lvl1p
budgeunit.addtochildren lvl1m

你也应该修改你对函数的使用,并可能用 Subs 替换它们。你不期望他们有任何输出,所以......

另一件事是您对括号的使用。 subs 的参数(以及没有预期返回值的函数)不应被括号括起来;在某些情况下,有括号会使事情出错。 (如果您使用 Call 表示法,则有一定的限制,但您不这样做。)

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

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