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

Vba 如何按字母顺序命名Excel工作表?,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:=Act

我正在尝试创建一个宏,它将复制实际的工作表,并用字母表的下一个字母命名。工作簿中始终存在第一页“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

你们中有谁能帮上忙吗?

您只需像这样编写代码即可:

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
子新列表()
'新建列表宏
将字母变为字符串

PrevLetter=ActiveSheet.Name'您的代码出现了索伦提到的错误

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

你可能想试试这个?为此,哪张图纸处于活动状态并不重要。此外,此代码还允许您在
Z
之外创建图纸。因此
Z
之后的纸张将命名为
AA
AB

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

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
子新列表()
将字母变为字符串
将ws作为工作表,将ws作为工作表新建
将wsname设置为字符串
Set ws=ThisWorkbook.Sheets(“A”)
ws.Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
设置wsNew=ActiveSheet
wsname=GetNewName
wsNew.Name=wsname
端接头
函数GetNewName()作为字符串
将NewWs设置为工作表
对于此工作簿的i=2。工作表(1)。列数
ColName=Split(ThisWorkbook.Sheets(1).单元格(,i).地址,“$”)(1)
出错时继续下一步
Set NewWs=thisvoolk.Sheets(ColName)
如果错误号为0,则
GetNewName=ColName
退出
如果结束
接下来我
端函数

以下是另一种方法:

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

我真的很惊讶这么快就得到了答案。所有的变体都可以工作,然而,Siddharth的解决方案对我来说确实是最有用的,因为可以从任何一张图纸创建新的图纸。谢谢大家,伙计们。@Søren,@Chris