Sub GetShName()
Dim sht As Worksheet, k As Long
Application.ScreenUpdating = False
With Range("a:a")
.Clear '清除所有
.NumberFormat = "@" '设置文本格式
End With
k = 1
Cells(1, 1) = "目录"
For Each sht In Sheets '遍历工作表
k = k + 1 '累加个数
Cells(k, 1) = sht.Name
Next
Application.ScreenUpdating = True
End Sub
示例文件中代码返回结果如下:
然后对A列数据进行排序,这个时候你可以用各种手段修理它们,升序、降序、自定义排序、基操、函数等等,你爱怎么着就怎么着,开心就好。
最后使用以下代码按照A列排序后的数据对工作表重新排放位置。
代码看不全可以左右拖动..▼
Sub SortSh()
Dim sht As Worksheet, shtAct As Worksheet
Dim aData, i As Long, intCount As Long
Dim strName As String, strErr As String
On Error Resume Next '忽略程序错误继续运行
If ActiveWorkbook.ProtectStructure = True Then
MsgBox "工作簿有保护,工作表无法排序。"
Exit Sub
End If
Application.ScreenUpdating = False
aData = Range("a1:a" & Cells(Rows.Count, 1).End(xlUp).Row)
intCount = Sheets.Count '所有工作表的数量
Set shtAct = ActiveSheet '当前工作表
For i = 1 To UBound(aData) '遍历名单
strName = aData(i, 1) '工作表名称
Err.Clear '错误状态初始化
Set sht = Sheets(strName)
If Err.Number Then '试错法判断工作簿是否存在相关工作表
strErr = strErr & "," & strName
Else
'移动到最后一个工作表之后
sht.Move after:=Sheets(intCount)
End If
Next
If strErr <> "" Then
MsgBox "以下工作表名称工作簿中不存在" & vbCr _
& Mid(strErr, 2)
Else
MsgBox "排序完成。"
End If
shtAct.Select '回到操作表
Application.ScreenUpdating = True
End Sub
代码详细解析见注释,概要解释如下▼
第11行代码将A列的数据存入数组aData。
第14至第24行代码遍历数组。依次将相关工作表名移动到最后一张工作表之后——听说每个人都有一个梦想,做一名人民教师,为的不是教书育人,而是点名扔粉笔头。代码运行的场景大概就是这样:你化身人民教师,先将工作表排成一排,让他们按身高或亲疏依次站到排尾,也就实现有序排列……
联系客服