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

Passing object to Class method: Object doesn't support this property or method

您好,我在 excel 2013 vba 工作,我想将工作表对象传递给 class 函数:

'Class module Class1'

Sub receive(ByRef ws As Worksheet)
    msgbox ws.name
End Sub

调用 class 方法接收:

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

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

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

我在概念上缺少什么?

提前致谢!

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

myClass.receive ws

或添加Call关键字:

Call myClass.receive(ws)

只有在以下情况下调用例程时才需要括号:

  • 您使用了Call关键字;或
  • 您正在调用函数 and 使用 return 值;或
  • 您明确需要评估或取消引用 您传递的变量。