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

VBA ByRef Error Passing a Class Object to a Sub

我正在尝试将一个对象传递给一个新的 sub,但一直遇到 ByRef 不匹配错误。

我已将我的对象声明为:

Dim targetWorkbook
Set targetWorkbook = New CWorkbooks

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

checkbook targetWorkbook

我的子设置为:

Sub checkbook(targetWorkbook As CWorkbooks)

'Checking if passthrough is working

End Sub

感谢任何帮助,我的类型都是对齐的,所以我不确定为什么会这样。

谢谢!

我能够用编译器复制你的问题。下面通过编译器运行。您将 TargetWorkbook 声明为 Variant,然后将其设置为 CWorkbooks - 这有效,但在传递给 sub 时无效。

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

google 把我带到这里来解决同样的问题,但发现接受的答案缺乏并且在我的情况下根本不起作用,其中 Foo() 是一个模块而 Par() 是一个工作表,试图通过 class数组.