Excel VBA。如何将对象作为可选参数传递并能够检测它们?

时间:2013-11-20 11:51:38

标签: excel vba collections

我在Excel中的类模块中创建了一个自定义集合类。我想把一个函数用一些自定义对象填充集合,所以我可以一次传递一个或多个对象。

我创建的功能是:

Public Sub Add( Object1 As customClass, _
               Optional Object2 As customClass, _
               Optional Object3 As customClass, _
               Optional Object4 As customClass, _
               Optional Object5 As customClass)

问题是我不知道如何检测传递给函数的args数量...... 我该如何检测它们?

另一方面,我尝试这样的事情:

Dim i as integer
for i = 1 to 5
If Not IsMissing("Object" & i) then MyCollection.Add "Object" & i
Next i

...明显购买它不起作用。

我怎样才能以优雅和简单的方式做到这一点?

1 个答案:

答案 0 :(得分:3)

If Object2 Is Nothing Then
    Debug.Print "obj2 is nothing"
Else
    MyCollection.Add Object2
End If

不那么漂亮的方式,但代码更少

If Not Object2 Is Nothing then
    MyCollection.Add Object2
End if

Public Sub AddExtended(ParamArray arr())
    Dim item
    Debug.Print "the count: " & UBound(arr) + 1
    For Each item In arr
        If TypeOf item Is customClass Then
            Debug.Print "type of item is customClass"
            'MyCollection.Add item
        End If
    Next
End Sub

,例如调用

Dim o1 As New customClass
Dim o2 As New customClass

Call AddExtended(o1, o2, o2)
'AddExtended o1, o2, o2

您还可以使用自定义集合

请参阅thisthis