Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>Thanks for the responses. I ended up creating my own class which extends the Collections class in VBA. Below is the code if anyone is interested.</p> <pre><code>'Custom collections class is based on the Collections class, this class extendes that 'functionallity so that the sort method for a collection of objects is part of 'the class. 'One note on this class is that in order to make this work in VBA, the Attribute method has to be added 'manually. To do this, create the class, then export it out of the project. Open in a text editor and 'add this line Attribute Item.VB_UserMemId = 0 under the Item() function and this line 'Attribute NewEnum.VB_UserMemId = -4 under the NewEnum() function. Save and import back into project. 'This allows the Procedure Attribute to be recognized. Option Explicit Private pCollection As Collection Private Sub Class_Initialize() Set pCollection = New Collection End Sub Private Sub Class_Terminate() Set pCollection = Nothing End Sub Function NewEnum() As IUnknown Set NewEnum = pCollection.[_NewEnum] End Function Public Function Count() As Long Count = pCollection.Count End Function Public Function item(key As Variant) As clsCustomCollection item = pCollection(key) End Function 'Implements a selection sort algorithm, could likely be improved, but meets the current need. Public Sub SortByProperty(sortPropertyName As String, sortAscending As Boolean) Dim item As Object Dim i As Long Dim j As Long Dim minIndex As Long Dim minValue As Variant Dim testValue As Variant Dim swapValues As Boolean Dim sKey As String For i = 1 To pCollection.Count - 1 Set item = pCollection(i) minValue = CallByName(item, sortPropertyName, VbGet) minIndex = i For j = i + 1 To pCollection.Count Set item = pCollection(j) testValue = CallByName(item, sortPropertyName, VbGet) If (sortAscending) Then swapValues = (testValue &lt; minValue) Else swapValues = (testValue &gt; minValue) End If If (swapValues) Then minValue = testValue minIndex = j End If Set item = Nothing Next j If (minIndex &lt;&gt; i) Then Set item = pCollection(minIndex) pCollection.Remove minIndex pCollection.Add item, , i Set item = Nothing End If Set item = Nothing Next i End Sub Public Sub Add(value As Variant, key As Variant) pCollection.Add value, key End Sub Public Sub Remove(key As Variant) pCollection.Remove key End Sub Public Sub Clear() Set m_PrivateCollection = New Collection End Sub </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload