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数组.
我正在尝试将一个对象传递给一个新的 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数组.