VBA代码大全004:如何用vba按照excel工作表的名称排序?

在多年的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
       

发表评论