首先選擇是使用/不同類型的循環的迭代,其根據片索引號。這是隻爲Worksheets Collection
運行代碼:
Sub RenameSheet()
Dim rs As Long
For rs = 5 To Worksheets.Count
Worksheets(rs).Name = Worksheets(rs).Range("D5")
Next rs
End Sub
你的循環開始爲工作表的5日一直持續到最後一個。
另一種選擇是排除所有工作表與您在您的問題提到的名字。在這種情況下,你可以運行此宏:
Sub RenameSheet()
Dim rs As Worksheet
For Each rs In Sheets
if rs.name <> "Summary" And rs.Name <> "RONATemplate" and rs.Name <> "KeycanTemplate" Then
rs.Name = rs.Range("D5")
end if
Next rs
End Sub
但是,請記住,像所有rs.Name <> "Summary"
條件檢查是大小寫敏感的,因此,你需要把內碼適當的名稱,包括大寫和較低的情況下。或者你可以使用UCase
函數比較大寫的名字,如:
if UCase(rs.Name) <> "SUMMARY" And UCase(rs.Name) <> "RONATEMPLATE" And Ucase(rs.Name) <> "KEYCANTEMPLATE" Then
我會建議使用第二種改進的過程中。如果您更改工作表的順序(例如,將第一個工作表移至第六個工作位置),您將得到意外結果,首先運行For i=1
循環。運行第二種類型的循環/子程序時沒有這樣的問題。
'用於RS = 5在Sheets.Count'應'對於rs = 5到Sheets.Count'當然。 –
對,謝謝:) –
另一件事,我要指出的是,如果有任何圖表'Sheets',你將在第一個圖表上得到438運行時錯誤,因爲圖表中沒有'range'對象。 –