我想从主工作表中的“项目”列表中创建工作表。创建工作表时,我希望将其重命名为列表中的项目编号。
我找到了两个完成这项工作的宏,但我需要它们一起工作。
这个创建标签并重命名。
Sub CreateSheetsFromAList()
Dim MyCell As Range, MyRange As Range
Set MyRange = Sheets("Invoice Summary").Range("B11")
Set MyRange = Range(MyRange, MyRange.End(xlDown))
For Each MyCell In MyRange
Sheets.Add After:=Sheets(Sheets.Count) 'creates a new worksheet
Sheets(Sheets.Count).Name = MyCell.Value ' renames the new worksheet
Next MyCell
End Sub
这个复制主标签并创建另一个工作表。
Sub Test()
Dim ws1 As Worksheet
Set ws1 = ThisWorkbook.Worksheets("Master")
ws1.Copy ThisWorkbook.Sheets(Sheets.Count)
End Sub
答案 0 :(得分:3)
假设工作簿中没有名为“Master(2)”的工作表,则此代码应该有效:
Sub CreateSheetsFromAList()
Dim ws1 As Worksheet
Set ws1 = ThisWorkbook.Worksheets("Master")
Dim MyCell As Range, MyRange As Range
Set MyRange = Sheets("Invoice Summary").Range("B11")
Set MyRange = Range(MyRange, MyRange.End(xlDown))
For Each MyCell In MyRange
ws1.Copy ThisWorkbook.Sheets(Sheets.Count)
ThisWorkbook.Worksheets("Master (2)").Name = MyCell.Value
Next MyCell
End Sub
从Worksheet.Copy方法返回没有工作表对象,这似乎很奇怪。
使用xlDown获取结束范围时要注意的一件事 - 如果您的范围内有零个单元格或一个单元格,xlDown将一直延伸到工作表的最后一行,这将产生不良行为。在这种情况下,尝试重命名目标工作表时会出错,但需要注意。