我知道如何制作马科斯,但在学校期间,他从未教过我与他们有关的一切,主要是与昏暗。 我的问题是如何制作一个将重新命名前四张所有纸张的marco。
Sub RenameSheet()
Dim rs As Worksheet
For Each rs In Sheets
rs.Name = rs.Range("D5")
Next rs
End Sub
适用于每张纸,但我不想重命名每张纸。我的前四个是Documentation,Summarry,RONATemplate,KaycanTemplate。我想留下的是。我真的只是把这些名字放在单元格D5中,使其在模板上工作,它会搞砸我的其他马科斯。
答案 0 :(得分:0)
第一个选项是使用不同类型的循环,它根据工作表索引/数字进行迭代。以下是仅针对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
循环后运行意外结果。运行第二种类型的循环/子程序没有这样的问题。
答案 1 :(得分:0)
您可以创建一个黑名单,并检查rs.Name
是否是您不想更改的名称之一,或者您可以按索引访问这些表。
即
For i = 5 to Worksheets.Count
Worksheets(i).Name = rs.Range("D5")
Next
答案 2 :(得分:0)
要在第4个之后更改每个工作表,请在if语句中使用工作表的index属性:
Sub RenameSheet()
Dim rs As Worksheet
For Each rs In Sheets
If rs.Index > 4 Then
rs.Name = rs.Range("D5")
End If
Next rs
End Sub