我试图创建一个新的工作表,通过复制'模板',如果不存在 .
表格的名称基于A栏(从'Master'的A5开始的列表) . “主人”中的列表将每天更新 .
我通过循环现有的表格检查列表中的新名称 . 如果列A(Sheet'Master')中的单元格已经有一个带有名称的工作表,则不执行任何操作并转到下一个单元格 . 如果列表中的名称不在工作簿的工作表名称中,则会添加工作表(“模板”的副本)并以单元格值命名 .
我能够创建新的工作表,但是对于每个现有的工作表,宏都会创建其他工作表('template(2)','template(3)','template(4)'等) .
我该怎么做才能消除那些新的'模板(#)'?
这是我的代码:
Sub AutoAddSheet()
Dim MyCell As Range, MyRange As Range
Set MyRange = Sheets("Master").Range("A5")
Set MyRange = Range(MyRange, MyRange.End(xlDown))
For Each MyCell In MyRange
On Error Resume Next
Sheets("Template").Copy After:=Sheets(Sheets.Count)
With Sheets(Sheets.Count)
.Name = MyCell.Value
.Cells(2, 1) = MyCell.Value
End With
On Error GoTo 0
MyCell.Hyperlinks.Add Anchor:=MyCell, Address:="", SubAddress:="'" & MyCell.Value & "'!A1"
Next MyCell
End Sub
3 回答
您需要先检查工作表是否存在,这是我写的一个有效的函数:
所以,修改你的代码:
你可以用不同的方式尝试 . 首先,遍历工作簿中的所有
Worksheets
并将其名称保存在sheetNames
数组中 .然后,对于范围中的每个单元格,您可以使用
Match
函数查看它是否已存在于工作簿中 . 如果Match
失败,则表示在工作表名称>>中找不到MyCell.Value
,因此请创建它 .Code
我只是稍微调整了一下代码,以确保所有引用都完全合格 . 它应该更容易理解,并且您不会冒Excel让您对从/到哪里复制感到困惑的风险 .
经过测试,适合我