重命名宏中的表格而不重命名前四页

时间:2013-05-25 13:38:41

标签: excel excel-vba renaming vba

我知道如何制作马科斯,但在学校期间,他从未教过我与他们有关的一切,主要是与昏暗。 我的问题是如何制作一个将重新命名前四张所有纸张的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中,使其在模板上工作,它会搞砸我的其他马科斯。

3 个答案:

答案 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