VBA ByRef错误将类对象传递给Sub

时间:2016-04-16 22:31:31

标签: vba class mismatch byref

我正在尝试将对象传递给新子,但仍然遇到ByRef Mismatch错误。

我已将我的对象声明为:

Dim targetWorkbook
Set targetWorkbook = New CWorkbooks

我正在使用以下方式调用我的潜艇:

checkbook targetWorkbook

我的子设置为:

Sub checkbook(targetWorkbook As CWorkbooks)

'Checking if passthrough is working

End Sub

感谢任何帮助,我的类型是一致的,所以我不知道为什么会这样。

谢谢!

2 个答案:

答案 0 :(得分:1)

Sub Foo()
    'single class object
    Dim myClass1 As New clsClass
    myClass1.StringName = "cls1"
    Call Par(myClass1)

    'or class array
    Dim myClass2(1 To 5) As New clsClass
    myClass2(1).StringName = "cls2"
    Call Par(myClass2)

End Sub

Sub Par(ByRef lClass As Variant) 'same function call used for both
    'Debug.Print lClass.StaffName & vbNewLine 'single class object
    'Debug.Print lClass(1).StaffName & vbNewLine 'array version
End Sub

谷歌把我带到这里来解决相同的问题,但是发现在Foo()是一个模块而Par()是一个工作表,试图传递类数组的情况下,缺少的答案根本不起作用。

答案 1 :(得分:0)

我能够用编译器复制你的问题。以下传递编译器并运行。您将TargetWorkbook声明为Variant,然后将其设置为CWorkbooks - 这是有效的,但在传递给子时却没有。

Sub main()
    Dim TargetWorkbook As CWorkbooks
    Set TargetWorkbook = New CWorkbooks
    checkbook TargetWorkbook
End Sub
Sub checkbook(ByRef TargetWorkbook As CWorkbooks)

'Checking if passthrough is working

End Sub