我正在尝试创建一个宏,它将复制实际工作表并将其命名为下一个字母。第一张" 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
你们有人可以帮忙吗?
答案 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
之后的工作表将被命名为AA
,AB
等。
XFD
(更多16383张)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