如何按字母顺序命名Excel工作表?

时间:2013-10-27 08:41:00

标签: vba excel-vba excel

我正在尝试创建一个宏,它将复制实际工作表并将其命名为下一个字母。第一张" A"始终存在于工作簿中,必要时将添加其他工作表(B,C,D等)。我设法将以下一段代码放在一起,可以创建工作表" B"。问题是,当复制工作表" B"时,我得到运行时错误' 1004'表示最后一行代码的错误。

Sub newList()
' New_List Macro
Dim PrevLetter As String

PrevLetter = "ActiveSheet.Name"
ActiveSheet.Copy after:=ActiveSheet
ActiveSheet.Name = Chr(Asc(PrevLetter) + 1)

End Sub

你们有人可以帮忙吗?

3 个答案:

答案 0 :(得分:1)

你应该简单地编写这样的代码:

Sub newList()
' New_List Macro
Dim PrevLetter As String

PrevLetter = ActiveSheet.Name             '<--- Change made to this line
ActiveSheet.Copy after:=ActiveSheet
ActiveSheet.Name = Chr(Asc(PrevLetter) + 1)

End Sub

编辑:这不是“最佳实践代码”的答案。这只是指出您自己的代码中返回错误的内容。这个问题的其他答案(到目前为止)确实是解决这个问题的更复杂和正确的方法。

答案 1 :(得分:1)

你的代码在Soren提到时给出了错误。

但是,如果工作表“A”在创建“B”后处于活动状态,则代码将显示错误,因为工作表“B”已经存在。

您可能想尝试一下吗?为此,哪个工作表处于活动状态并不重要。此代码还允许您创建超出Z的工作表。因此,Z之后的工作表将被命名为AAAB等。

  • 使用此代码,在XL2007 +中,您可以创建表格直到XFD(更多16383张)
  • 使用此代码,在XL2003中,您可以创建截至IV(更多255张)的工作表

<强> CODE:

Sub newList()
    Dim PrevLetter As String
    Dim ws As Worksheet, wsNew As Worksheet
    Dim wsname As String

    Set ws = ThisWorkbook.Sheets("A")
    ws.Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
    Set wsNew = ActiveSheet
    wsname = GetNewName
    wsNew.Name = wsname
End Sub

Function GetNewName() As String
    Dim NewWs As Worksheet

    For i = 2 To ThisWorkbook.Sheets(1).Columns.Count
        ColName = Split(ThisWorkbook.Sheets(1).Cells(, i).Address, "$")(1)
        On Error Resume Next
        Set NewWs = ThisWorkbook.Sheets(ColName)

        If Err.Number <> 0 Then
            GetNewName = ColName
            Exit For
        End If
    Next i
End Function

答案 2 :(得分:0)

以下是另一种方法:

Sub newList()
' New_List Macro
    Dim PrevLetter As String
    Dim wb As Workbook
    Dim ws1 As Worksheet

    Set wb = ActiveWorkbook
    Set ws1 = wb.ActiveSheet
    PrevLetter = ws1.Name
    ws1.Copy After:=ws1
    Sheets(Sheets.Count).Name = Chr(Asc(PrevLetter) + 1)

    Set wb = Nothing
    Set ws1 = Nothing

End Sub