对特定工作表之间的select表进行sorting

我有一个有四个“系统”工作表的工作簿,每个系统表都有一个dynamic数字或随后的标签,用于各种数据收集。 我需要的是按照字母顺序排列系统及其子页的方式,但是存在于两个特定页之间。 例:

[ 系统1 ] [系统1儿童1-12] [系统2] [系统2儿童1-12] [系统3] [系统3儿童1-12] [系统4] [系统4 1-12] [其他表]

我已经尝试sorting如subs

For Each w1 In Sheets For Each w2 In Sheets If w1.Range("Z1") <> "" And w2.Range("Z1") <> "" Then If w2.Range("Z1").Value < w1.Range("Z1").Value Then If w2.Range("Z1").Value = "S1L0" Then w2.Move after:=Cover Else w2.Move before:=w1 End If End If End If Next w2 Next w1 

它开始工作很好,但随后循环失控,我有一个工作表“S1L0”在目标范围内应该是,其他一切都在列表的末尾。 任何想法,我怎么能得到这个工作?

编辑:系统表都以“S1”开始到“S4”,但是它们被重新命名为“S1 – %string%”到“S4 – %string%”,子表是最初命名为“ S#L#“,其中#分别是系统和子号码。 儿童床单也可以重新命名,但会遵循“S#L# – %string%”

这应该做的工作:

 Sub SortSheets() Dim lngParentID As Long, lngChildID As Long Dim wsParent As Worksheet, wsChild As Worksheet, wsLast As Worksheet Set wsLast = Sheets("Customer Info Sheet") For lngParentID = 1 To 4 Set wsParent = GetSheet(lngParentID) If Not wsParent Is Nothing Then wsParent.Move After:=wsLast Set wsLast = wsParent For lngChildID = 1 To 12 Set wsChild = GetSheet(lngParentID, lngChildID) If Not wsChild Is Nothing Then wsChild.Move After:=wsLast Set wsLast = wsChild End If Next lngChildID End If Next lngParentID End Sub Private Function GetSheet(lngParentID As Long, Optional lngChildID As Long = 0) As Worksheet Dim ws As Worksheet For Each ws In Sheets If (lngChildID = 0 And (ws.Name = "S" & lngParentID Or Left(ws.Name, 4) = "S" & lngParentID & " -")) Or _ Left(ws.Name, 5) = "S" & lngParentID & "L" & Format(lngChildID, "00") Then Set GetSheet = ws Exit Function End If Next End Function