When developing VBA macros for either AutoCAD or MicroStation it is often necessary to display a list of the layers/levels in the active file in either a ListBox control or ComboBox control. Unfortunately the layer/level names are not sorted in alphabetical order and the VBA UserForm controls do not have their own Sort methods. Using a standard bubble sort routine does a nice job of sorting a string array of layer/level names.
Public Sub BubbleSort(ByRef arr() As String, Optional numEls = -1 As Long, Optional
Descending As Boolean = False)
Dim Value As String
Dim index As Long
Dim firstItem As Long
Dim indexLimit As Long
Dim lastSwap As Long
' account for optional arguments
If numEls = -1 Then
numEls = UBound(arr)
End If
firstItem = LBound(arr)
lastSwap = numEls
Do
indexLimit = lastSwap - 1
lastSwap = 0
For index = firstItem To indexLimit
Value = arr(index)
If (Value > arr(index + 1)) Xor Descending Then
' if the items are not in order, swap them
arr(index) = arr(index + 1)
arr(index + 1) = Value
lastSwap = index
End If
Next
Loop While lastSwap
End Sub
Envision is a leading provider of CAD related solutions to engineers, surveyors, and GIS professionals. We have been providing expert solutions for CAD, Civil and Geospatial applications for both government agencies and AEC firms since 1996.