我有一張工作簿,大約有50張。我想編寫一個按字母順序排序的模塊,然後在名爲「Closed =>」的選項卡之後將具有黑色選項卡的表單移動到最後。按字母順序排序後按顏色排序
Sub sortsheets()
Dim WB As Workbook
Dim WS_Count As Integer
Dim i As Integer
Dim j As Integer
Set WB = ActiveWorkbook
WS_Count = WB.Sheets.count
'Below will sort alphabetically
For i = 1 To WS_Count
For j = 1 To WS_Count - 1
If UCase(Sheets(j).name) > UCase(Sheets(j + 1).name) Then
Sheets(j).Move after:=Sheets(j + 1)
End if
Next j
Next i
' Move closed tab to the end
For i = 1 To WS_Count
If UCase(Sheets(i).name) = "Closed =>" Then
Sheets(i).Move after:=Sheets(WS_Count)
End If
Next i
' Below needs to iterate through the sheets and move all black sheets to the end
For i = 1 To WS_Count
For j = 1 To WS_Count
If Sheets(j).Tab.ColorIndex = 1 Then
Sheets(j).Move after:=Sheets(WS_Count)
End If
Next j
Next i
End Sub
問題是,最後一步將黑色頁面移動到結尾處將廢棄字母順序。我認爲那是因爲在它繼續循環的時候,它正在穿過已經移動到最後的黑色牀單,並再次移動它們。我怎樣才能防止呢?
其實試過循環您在使用'最後一步做的方式I = I-1'但我沒有考慮到'bcount'。星期一讓我試試吧。我有一個關於前兩個循環中的循環算法的問題:對於我來說,對於j..'。我想出了j循環的必要性,因爲如果我們只執行i循環,我們會在將工作表移動到最後之後跳過工作表。但是,我無法向我自己證明這些循環會照顧所有牀單。我能夠成功地對其進行測試,但在概念上並沒有證明它對我自己。這是一個我能讀懂的證明的已知算法嗎? – newdimension
從概念上講,第一個嵌套循環與[冒泡排序](https://en.wikipedia.org/wiki/Bubble_sort)類似(不是最高效但易於實現的),但是對於此循環來說太多;我們可以優化它通過消除中間的一個,如果表「關閉=>」將始終存在於您的文件 –
感謝您的文章!是的,工作簿將始終有一個名爲「已關閉=>」的表單 – newdimension