第一个选项是使用基于工作表索引/编号迭代的不同类型的循环。这是仅针对以下运行的代码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
我建议使用第二种改进的程序。如果您更改工作表的顺序(例如将第一张工作表移动到第 6 个位置),您将在第一个For i=1
循环中得到意想不到的结果。运行第二种类型的循环/子程序没有这样的问题。