Sub Zldccmx()
Application.ScreenUpdating = False'关闭屏幕实时更新
Application.EnableEvents = False'暂停系统事件响应
Dim Shname '定义一个变量
For Each sh In ThisWorkbook.Worksheets '遍历当前工作簿下的所有工作表
If sh.Name <> "目录" Then Shname = Shname & Chr(1) & sh.Name '除了指定的“目录”工作表以外,其它各工作表的名称记录到字符串Shname中,并用一个特殊的字符CHR(1)来作为分界符
Next
Shname = Split(Mid(Shname, 2), Chr(1)) '将字符串按既定的分界符拆分成一个一维数组
With Sheets("目录")
.Cells(1, 256).Resize(UBound(Shname) + 1, 1) = WorksheetFunction.Transpose(Shname) '将一维数组暂存到工作表"目录"的最后一列,然后借助工作表来对工作表名称进行排序
.Columns("IV:IV").Sort Key1:=.Range("IV1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
:=xlPinYin, DataOption1:=xlSortTextAsNumbers '执行排序,按升序排序
Shname = .Range([iv1], [iv1].End(xlDown)) '将排序后的工作表名转存到数组Shname中,此时的数组已经变形成一个2维数组
.Range([iv1], [iv1].End(xlDown)) = "" '清除刚刚借用的工作表部分区域
End With
Sheets("目录").Move before:=Sheets(1) '按题目要求,将工作表 “目录”放在首位
For i = 1 To UBound(Shname)
Sheets(Shname(i, 1)).Move before:=Sheets(i + 1) '依次移动工作表,由于此时的数组已经变形成一个2维数组,所以书写格式就是Shname(i,1)
Next
Application.EnableEvents = True'恢复系统事件响应
End Sub
鼠标按住sheet表手工拖动即可,如果要自动排序,则考虑使用编程语言吧
意思不明确