在多年的vba编写过程中,也曾遇到过需要用vba对工作表进行排序的情况。
也就是将一个工作簿的所有工作表按照字符的顺序从大到小或者从小到大的左右重新调整排序。
这个问题的思路一般是先提取所有工作表的名称存入数组,然后对数组内的元素选择某种排序算法进行排序,最后用Worksheet对象的Move方法将数组内的工作表名称所代表的工作表对象左右调整顺序。
代码如下:
Sub 排序工作表()
'QQ:1722187970,微信:xycgenius,公众号:水星excel
Excel.Application.ScreenUpdating = False
Excel.Application.Calculation = xlCalculationManual
Dim oWKEnd As Worksheet
Dim oWKStart As Worksheet
iCount = Excel.ThisWorkbook.Worksheets.Count
Dim oWKTemp As Worksheet
'提取要排序的所有工作表的名称
Dim arrName()
k = 0
For Each oWKTemp In Excel.ThisWorkbook.Worksheets
With oWKTemp
sName = .Name
ReDim Preserve arrName(k)
arrName(k) = sName
k = k + 1
End With
Next
'循环每个元素,直到最开始的两个元素
For j = 0 To UBound(arrName) - 1
'用UBound(arr) - 1 - j每次循环都忽略到已经排好序的末尾元素
For i = 0 To UBound(arrName) - 1 - j
'从小到大排序
If arrName(i) > arrName(i + 1) Then
'比较大小交换元素
Temp = arrName(i)
arrName(i) = arrName(i + 1)
arrName(i + 1) = Temp
End If
Next i
Next j
'开始排序工作表
For i = 0 To UBound(arrName)
Set oWKTemp = Excel.ThisWorkbook.Worksheets(arrName(i))
Set oWKEnd = Excel.ThisWorkbook.Worksheets(iCount)
'从小到大排序
oWKTemp.Move after:=oWKEnd
'从大到小排序
'Set oWKStart = Excel.ThisWorkbook.Worksheets(1)
'oWKTemp.Move before:=oWKStart
Next i
Excel.Application.ScreenUpdating = True
Excel.Application.Calculation = xlCalculationAutomatic
End Sub


发表评论