将对象传递给Class方法:Object不支持此属性或方法

Adi*_*tya 3 excel vba class pass-by-reference excel-vba

嗨我在excel 2013 vba工作,我想将工作表对象传递给类函数:

'类模块Class1'

Sub receive(ByRef ws As Worksheet)
    msgbox ws.name
End Sub
Run Code Online (Sandbox Code Playgroud)

调用类方法接收:

Sub passToClass()
  Dim ws as Worksheet
  Set ws = ThisWorkbook.Worksheets("sheet1")
  Dim myClass As New Class1
  myClass.receive(ws) ' Run-time Error '438': Object doesn't support this property or method
End Sub
Run Code Online (Sandbox Code Playgroud)

一个有效的简单测试是同一模块中的两个子程序:

Sub pass()
   Dim ws as Worksheet
   Set ws = ThisWorkbook.Worksheets("sheet1")
   call receive(ws)
End Sub

Sub Receive(ByRef ws As Worksheet)
    msgbox ws.name
End Sub
Run Code Online (Sandbox Code Playgroud)

我在概念上错过了什么?

提前致谢!

Ror*_*ory 5

您需要从调用中删除括号:

myClass.receive ws
Run Code Online (Sandbox Code Playgroud)

或添加Call关键字:

Call myClass.receive(ws)
Run Code Online (Sandbox Code Playgroud)

只有在调用例程时才需要括号:

  • 你使用Call关键字; 要么
  • 您正在调用函数使用返回值; 要么
  • 您明确需要评估或取消引用您传递的变量.