首先选择是使用/不同类型的循环的迭代,其根据片索引号。这是只为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'对象。 –