如何在vba函数中传递类变量

时间:2012-03-16 13:01:44

标签: vba excel-vba excel

我想将我的一组对象和变量传递给VBA函数,对它进行一些更改并将其作为结果传回。所以我创建了一个示例Class1:

Public pInfo As String

和样本函数:

Public Function populate(someVar As Class1) As Class1

    populate.pInfo = someVar.pInfo & " 1 "

End Function

并尝试将其传递给我的函数populate:

Sub test()
Dim v, w As Class1
Set v = New Class1
v.pInfo = "303"
Set w = populate(v) ' ERROR here

End Sub

导致编译错误:byRef参数类型不匹配。

更新。感谢你的帮助,它现在可以编译。

2 个答案:

答案 0 :(得分:3)

类型错误

Dim v, w As Class1

此处不直观地w只有Class1类型,v是变体。 要使它们Class1,你必须:

Dim v As Class1, w As Class1

下面:

Public Function populate(someVar As Class1) As Class1
    populate.pInfo = someVar.pInfo & " 1 "
End Function

populate不是Class1的实例,您需要创建它:

Public Function populate(someVar As Class1) As Class1
    set populate = new Class1
    populate.pInfo = someVar.pInfo & " 1 "
End Function

(而不是使用功能,您可能更喜欢v.copyTo(w)

答案 1 :(得分:2)

您还需要更正Populate()方法,如下所示:

Public Function Populate(someVar As Class1) As Class1      
    Dim z as Class1

    Set z = New Class1

    z.pInfo = someVar.pInfo & " 1 " 

    Set Populate = z

    Set z = Nothing
End Function

您还需要注意,这将创建Class1的新实例,因此它不会继承someVar中的任何其他属性。