Stuart McLachlan
stuart at lexacorp.com.pg
Mon Apr 21 21:51:56 CDT 2003
On 21 Apr 2003 at 20:51, Susan Harkins wrote: > Anyone have an easy way to sort a list or combo control's list when > working with a Value List RowSourceType? > Assuming you are using A2K with it's Split and Join functions: Option Compare Database Private Sub btnSortList_Click() Dim strTempArray() As String 'create the array and 'Put a dummy space in element 0 of array strTempArray() = Split(" ;" & List0.RowSource, ";") 'sort the array Call Quicksort(strTempArray) 'Don't forget to strip element 0 again List0.RowSource = Mid$(Join(strTempArray(), ";"), 3) End Sub Sub Quicksort(X$()) 'quicksort sort of string array x$() ' VERY old QBasic code ' - but I've never needed to update it 'Note: Sorts elements X$(1) to UBound(X$) ' That's why we've padded the above Split with an initial element n% = UBound(X$) m% = 12 ReDim stack%(m%, 2) s% = 1 stack%(1, 1) = 1: stack%(1, 2) = n% spopstack: l% = stack%(s%, 1): r% = stack%(s%, 2): s% = s% - 1 sdividelr: i% = l%: j% = r%: a$ = X$(Int((l% + r%) / 2)) sscanr: If X$(i%) < a$ Then i% = i% + 1: GoTo sscanr sscanl: If X$(j%) > a$ Then j% = j% - 1: GoTo sscanl If i% > j% Then GoTo snextpart w$ = X$(i%): X$(i%) = X$(j%): X$(j%) = w$ i% = i% + 1: j% = j% - 1 If i% > j% Then GoTo snextpart GoTo sscanr snextpart: If j% - l% < r% - i% And i% < r% Then s% = s% + 1: stack%(s%, 1) = i%: stack%(s%, 2) = r% If j% - l% >= r% - i% And l% < j% Then s% = s% + 1: stack%(s%, 1) = l%: stack%(s%, 2) = j% If j% - l% < r% - i% Then r% = j% Else l% = i% If l% >= r% Then GoTo sexitloop GoTo sdividelr sexitloop: If s% = 0 Then Exit Sub GoTo spopstack End Sub -- Lexacorp Ltd http://www.lexacorp.com.pg Information Technology Consultancy, Software Development,System Support.