01 工作表

获取所有工作表名称后对工作表位置自定义排序

  工作簿内可以有多个工作表,工作表展现的顺序有时很重要!

  比如,多个工作表的内容是有顺序层次的,需要依次一个一个看过去!或者希望用表格的顺序表达重要的程度,都需要对表格排序。

  它的整个运行过程可以分成两个步骤 :

  • 1、工作表名称获取;
  • 2、对获取的工作表名称排序,按照工作表的名称顺序、对工作表排序!
如图所示,工作簿内的多个工作表,获取所有工作表名称并对其进行调整位置后,执行工作表排序:
点击放大的图片

运行视频:

源码下载:

描述:

  获取所有工作表名称后对工作表位置自定义排序

VBA实现过程:
  • 1..EntireColumn.ClearContents,只清除内容;
  • 2.Sheet.Move before:=Sheets(1),移动工作表到第一个工作表之前,它就变成第一个;
  • 3.Sheet.Move after:=Sheets(n - 1),移动工作表到上一个工作表之后。
示例代码(工作表名称获取)
复制成功!
1

Sub 获取工作簿内所有工作表名()

    Dim sht As Worksheet
    Dim n As Integer

    ActiveSheet.Range("A1").EntireColumn.ClearContents
    For Each sht In Sheets                 '遍历名单
        n = n + 1
        ActiveSheet.Cells(n, 1) = sht.Name '写入工作表
    Next sht

End Sub

示例代码(工作表排序)
复制成功!
1

Sub 工作表自定义排序()

    Dim rng As Range
    Dim last_row, n As Long
    Dim Str_name, Act_name As String
    Dim sht As Worksheet

    On Error Resume Next                                     '在错误发生时,仍可以继续运行
    last_row = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row 'A列最后一个非空单元格的行数,提取的工作表名的数量

    If Err.Number > 0 Then                                      '如果次此处发生错误,表示A列为空,无法获取last_row的数值
        MsgBox "未获取该工作簿中的任何工作表名,请先把工作表名称提取出来!"
        Exit Sub
    End If

    Act_name = ActiveSheet.Name
    With ActiveSheet
        For n = 1 To last_row                               '遍历名单
            Str_name = .Cells(n, 1).Value                   '单元格内容赋值作为工作表名称
            For Each sht In Sheets
                If n = 1 And Str_name = sht.Name Then       '遇到排名第一个的工作表,就移动到第一个
                   sht.Move before:=Sheets(1)
                   Exit For                                 '鉴于工作表肯定不会出现重名的,工作表执行排序后就跳出本次循环,节省时间
                ElseIf Str_name = sht.Name Then             '其他的陆续排列在前一个之后
                    sht.Move after:=Sheets(n - 1)
                    Exit For
                End If
            Next sht
        Next n
    End With

    Sheets(Act_name).Activate                            '激活名单所在的工作表

    MsgBox "完成"

End Sub

请开发者喝杯咖啡 请开发者喝杯咖啡!