0

我知道如何制作马可,但在学校期间,他从未教过我一切与他们有关的事情,主要是与 Dim。我的问题是如何制作一个marco,它将重命名我所有的床单,预计前四个。

Sub RenameSheet()

    Dim rs As Worksheet

    For Each rs In Sheets
        rs.Name = rs.Range("D5")
    Next rs

End Sub

适用于每张纸,但我不想重命名每张纸。我的前四个是文档、摘要、RONATemplate、KaycanTemplate。我想离开的是。我真的不能把这些名字放在单元格 D5 中,让它在它的模板中工作,它会弄乱我的其他 marcos。

4

3 回答 3

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循环中得到意想不到的结果。运行第二种类型的循环/子程序没有这样的问题。

于 2013-05-25T13:47:17.843 回答
0

您可以创建一种黑名单并检查是否rs.Name是您不想更改的名称之一,或者您可以按索引访问工作表。

IE

For i = 5 to Worksheets.Count
    Worksheets(i).Name = rs.Range("D5")
Next
于 2013-05-25T13:52:01.327 回答
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 
于 2013-05-25T13:57:08.577 回答