Sub BubbleSort(List() As String) Dim First As Long, Last As Long Dim i As Long, j As Long Dim Temp As String First = LBound(List) Last = UBound(List) For i = First To Last - 1 For j = i + 1 To Last If List(i) > List(j) Then Temp = List(j) List(j) = List(i) List(i) = Temp End If Next j Next i End Sub
过程接收不确定元素数量的List一维数组,通过LBound和UBound函数确定数组下界和上界。
对数组排序
通过之前宏录制得到移动Sheet的代码,加上For-Next使其遍历每个工作表:
1 2 3
For i = 1 To SheetCount ActiveWorkbook.Sheets(SheetNames(i)).Move Before:=ActiveWorkbook.Sheets(i) Next i
Dim SheetNames() As String Dim SheetCount As Long Dim i As Long
'统计活动工作簿Sheet数量,并重新设定SheetNames数组元素数量 SheetCount = ActiveWorkbook.Sheets.Count ReDim SheetNames(1 To SheetCount) '获取活动工作簿每个Sheet名称 For i = 1 To SheetCount SheetNames(i) = ActiveWorkbook.Sheets(i).Name Next i '调用BubbleSort程序对SheetNames数组进行排序 Call BubbleSort(SheetNames)
'移动Sheet For i = 1 To SheetCount ActiveWorkbook.Sheets(SheetNames(i)).Move Before:=ActiveWorkbook.Sheets(i) Next i
Dim SheetNames() As String Dim i As Long Dim SheetCount As Long Dim OldActive As Object
'判断是否存在活动工作簿,如果存在,统计Sheet数量 If ActiveWorkbook Is Nothing Then Exit Sub ' No active workbook SheetCount = ActiveWorkbook.Sheets.Count
'检查工作簿结构是否受到保护, If ActiveWorkbook.ProtectStructure Then MsgBox ActiveWorkbook.Name & " is protected.", vbCritical, "Cannot Sort Sheets." Exit Sub End If
'用户确认是否需要进行Sheet排序 If MsgBox("Sort the sheets in the active workbook?", vbQuestion + vbYesNo) <> vbYes Then Exit Sub
'记录原来的活动工作簿 Set OldActive = ActiveSheet '用Sheet名称填充数组 For i = 1 To SheetCount SheetNames(i) = ActiveWorkbook.Sheets(i).Name Next i '对数组进行排序 Call BubbleSort(SheetNames) '关闭屏幕更新 Application.ScreenUpdating = False
'移动Sheet For i = 1 To SheetCount ActiveWorkbook.Sheets(SheetNames(i)).Move Before:=ActiveWorkbook.Sheets(i) Next i
'恢复之前的活动工作表 OldActive.Activate
End Sub
Sub BubbleSort(List() As String) '按照字母升序排序法 Dim First As Long, Last As Long Dim i As Long, j As Long Dim Temp As String First = LBound(List) Last = UBound(List) For i = First To Last - 1 For j = i + 1 To Last If UCase(List(i)) > UCase(List(j)) Then Temp = List(j) List(j) = List(i) List(i) = Temp End If Next j Next i End Sub