Excel vba:Class sub:参数数目错误或vba上的属性赋值无效

Excel vba:Class sub:参数数目错误或vba上的属性赋值无效,vba,excel,Vba,Excel,我有一个类State和它里面的一些子类,它将Scripting.Dictionary作为参数。然而,当我试图将字典传递到那里时,我得到了一个错误的参数数或无效的属性赋值错误。我不知道怎么了 'Sub insite State class Sub addSecondItems(itemsDict As Object) MsgBox ("start addSecondItems") End Sub Sub test() Dim stateCopy As State Set stateCop

我有一个类
State
和它里面的一些子类,它将
Scripting.Dictionary
作为参数。然而,当我试图将字典传递到那里时,我得到了一个
错误的参数数或无效的属性赋值
错误。我不知道怎么了

'Sub insite State class
Sub addSecondItems(itemsDict As Object)
    MsgBox ("start addSecondItems")
End Sub

Sub test()
Dim stateCopy As State
Set stateCopy = New State
...
Dim dict1 As Object
Set dict1 = CreateObject("Scripting.Dictionary")
stateCopy.addSecondItems (dict1)  'error here
...
End Sub
同时

Sub testPetDict()

    Dim petDict As Object
    Set petDict = CreateObject("Scripting.Dictionary")
    Call readPetDict(petDict)

End Sub

Sub readPetDict(petDict As Object)
        Dim year As Integer
        For year = 2014 To 2017
            MsgBox (year & ". " & petDict(year))
        Next
End Sub
很好


这里可能有什么问题,为什么第二种情况有效,而第一种情况无效?

您应该删除括号:

stateCopy.addSecondItems dict1
或者使用
呼叫

Call stateCopy.addSecondItems(dict1)

否则,括号试图通过调用字典的默认属性
Item
,将字典强制为一个值,该属性需要一个参数,因此会显示错误消息。

删除括号:
stateCopy.addSecondItems dict1
或使用
Call
,通过使用括号,可以强制对象按值传递,这就是错误所在。@Rory谢谢你这个善良的人!你救了我免于绝望!你可以发布一个答案,我会批准的。@Kostas但是字典按值传递有什么问题?我不需要编辑它或其他什么。你不能通过值传递对象,只能通过引用。按值传递意味着创建并传递一个副本,其中通过引用只传递对对象的引用。