2021.6.30更新了答案。下圖的效果是:
先查檢L列的工作表名是否存在、或者是否有重復。
如果L列有不存在的、或者有重復的,會提示單元格坐標並且終止程序。
如果L列都是存在的、並且沒有重復的,就會按L列的順序移動工作表。
現在代碼已適應 用純數字命名的 工作表名稱。
Sub 移動工作表()
Dim dic As Object, rng As Range, i%, irow%, iNa$, k%
Set dic = CreateObject("scripting.dictionary") '創建字典
dic.CompareMode = 1 '設置為文字比較模式(即不區分大小寫)
'提取所有工作表名稱放進字典
For i = 1 To Sheets.Count
dic(Sheets(i).Name) = 1
Next
'判斷L列的工作表名是否存在、或是否重復
irow = Range("L" & Rows.Count).End(3).Row '獲取L列最大行號
For Each rng In Range("L2:L" & irow) '在此行修改L列的起始行號
dic(rng & "") = dic(rng & "") + 1
If dic(rng & "") < 2 Then
MsgBox rng.Address(0, 0) & "單元格:" & vbLf & rng & " 不存在!"
Exit Sub '退出程序
ElseIf dic(rng & "") > 2 Then
MsgBox rng.Address(0, 0) & "單元格:" & vbLf & rng & " 有重復!"
Exit Sub '退出程序
End If
Next
'對工作表進格移動操作
iNa = ActiveSheet.Name '記錄索引表的名稱
For Each rng In Range("L2:L" & irow) '在此行修改L列的起始行號
k = k + 1
Sheets(rng & "").Move Before:=Sheets(k)
Next
Sheets(iNa).Select '返回索引表
MsgBox "工作表排序完成!", , "提示"
End Sub