Function SortDocumentCollection(dc As NotesDocumentCollection, strKeyFieldName As String) As NotesDocumentCollection

%REM

dc a populated document collection that you what to sort

strKeyFieldName the field in the document that will be used as a key in the sort

%END REM

Dim session As New NotesSession

Dim db As NotesDatabase

Dim sdc As NotesDocumentCollection

Dim doc As NotesDocument

Dim itemSorKey As NotesItem

Dim a As Integer, b As Integer, c As Integer, moved As Integer

Dim varSorKey As Variant

Dim tmparray As SortingArray

%REM

in the declaration set-up the following custom class Type SortingArray

sortkey As Variant

unid As String

End Type

%END REM

Set db = session.CurrentDatabase

%REM

by creating a profile document collection for a form that dose not exist in the database create a document collection with no document in, this is used later to hold the sorted results.

%END REM

Set sdc = db.GetProfileDocCollection("$$Blank-DocumentCollection")

a% = 0

REM loop through document collection.

Set doc = dc.GetFirstDocument

Do While Not(doc Is Nothing)

Set itemSorKey = doc.GetFirstItem(strKeyFieldName)

REM check the sork key field item existes.

If itemSorKey Is Nothing Then

REM if not set the sort key to blank.

varSorKey = ""

Else

REM else set the sort key to the fiest value in the sort key item.

varSorKey = itemSorKey.values(0)

End If

REM populate custom class.

Redim Preserve array(a%) As SortingArray

array(a%).sortkey = varSorKey

array(a%).unid = doc.UniversalID

REM get the next document.

Set doc = dc.GetNextDocument(doc)

a% = a% + 1

Loop

REM sort sort the array.

b% = 0

moved% = True

Do Until Not moved%

moved% = False

REM assending sort.

For b% = 0 To Ubound(array) - 1

If array(b%).sortkey > array(b% + 1).sortkey Then

tmparray = array(b%)

array(b%) = array(b% + 1)

array(b% + 1) = tmparray

moved% = True

End If

Next

Loop

REM populate the blank document collection (sdc) in sorted order.

For c% = 0 To Ubound(array)

Set doc = db.GetDocumentByUNID(array(c%).unid)

Call sdc.AddDocument(doc)

Next

REM return the sorted document collection.

Set SortDocumentCollection = sdc

End Function