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
请开发者喝杯咖啡!