2015-08-26 119 views
0

我有一組屬性的同一類的對象的集合。我想創建一個較小的集合,它只包含具有特定屬性的特定值的對象,並且我希望能夠針對不同屬性多次調用子集,而無需製作大量子版本。將類屬性名稱傳遞給子集以搜索集合

下面是部分代碼是相關的問題:

Sub MAIN() 

    Dim SplitArr(1 to 2) As Variant 
    SplitArr(1) = Y 'where Y is the value you are looking for 
    GetSplit arr:=SplitArr, X:=?? 'where ?? is the property you are looking at" 

End Sub 

Sub GetSplit(ByRef arr(), X as ??) 'unsure what type X should be 
    Dim collSplit As Collection 
    Set collSplit = New Collection 
    For Each v In coll 
     If v.X = arr(1) Then 
      collSplit.Add v 
     End If 
    Next v 
    Set arr(2) = collSplit 
End Sub 

那麼會發生什麼是GetSplit搜索通過主收集,科爾,如果任何物體的存在有X屬性等於到Y它會將對象添加到collSplit集合中。最後arr(2)被設置爲collSplit。

我不知道該怎麼辦是將屬性名稱傳遞給子,所以任何幫助將不勝感激。

在此先感謝!

+0

將 '變形' 工作,它將使數字和字符串。 –

+0

@ScottCraner我假設Variant是sub的正確類型,但我不知道要在sub MAIN()中設置'??'等於什麼,或者我的符號可以在GetSplit中使用'vX',因爲X只會是一個變量,而不是對物業的引用 – JChristen

回答

0

這裏的工作的例子...

另clsTest:

Public Prop1 
Public Prop2 
Public Prop3 

常規模塊:

Sub Tester() 
    Dim o, i 
    Dim col As New Collection 
    Dim colF As Collection 

    'populate some sample data... 
    For i = 1 To 10 
     Set o = New clsTest 
     o.Prop1 = i 
     o.Prop2 = i * 5 
     o.Prop3 = "Test" 
     col.Add o 
    Next i 

    Set colF = PropFilter(col, "Prop1", 2) 
    Debug.Print colF.Count '>> 1 

    Set colF = PropFilter(col, "Prop3", "Test") 
    Debug.Print colF.Count '>> 10 

End Sub 


Function PropFilter(col As Collection, propName As String, propValue) 
    Dim o 
    Dim rv As New Collection 
    For Each o In col 
     If CallByName(o, propName, VbGet) = propValue Then 
      rv.Add o 
     End If 
    Next o 
    Set PropFilter = rv 
End Function 
+0

完美!謝謝蒂姆! – JChristen