如何从模板生成工作表

在VBA中,我想在第一张纸后从模板创build一张新纸张。

例如:在MyFirstSheet中,我有单元格B16 =“House”和一个button“NewSheetFromTemplate”。 当用户点击button时,在我的MyFirstSheet之后生成一个新的工作表,并且包含与标题House的TEMPLATE工作表相同的信息。

我的VBA代码:

Sub NewSheetFromTemplate() Dim sht As Worksheet Set sht = Sheets("TEMPLATE").Copy After:=sheets("MyFirstSheet") sht.Name = Range("B16").Value End Sub 

Excel中说我“语法错误”,但为什么?

我不认为是真的有必要创build工作表对象只是为了重命名。 试试就像这样:

 Sub NewSheetFromTemplate() Sheets("TEMPLATE").Copy After:=Sheets("MyFirstSheet") ActiveSheet.Name = Sheets("MyFirstSheet").Range("B16").Value End Sub 

下面的代码行不返回一个对象,一个被创build,但是这不会返回到VBA:

 Sheets("TEMPLATE").Copy After:=sheets("MyFirstSheet") 

这意味着你不能将这一行代码设置为一个对象。 相反,请尝试以下两种select之一:

使用索引

因为您已经在Sheets("MyFirstSheet")之后复制了新工作表,所以可以使用Sheets("MyFirstSheet")的工作表索引,然后添加1以获取刚创build的工作表。

 Sub NewSheetFromTemplate() Dim sht As Worksheet Sheets("TEMPLATE").Copy After:=sheets("MyFirstSheet") Set sht = Sheets(Sheets("MyFirstSheet").Index+1) sht.Name = Range("B16").Value End Sub 

使用“名称(2)”

或者,复制工作表的默认名称是带有“(2)”标签的原始名称。 这仍然是识别新工作表的一种有用方法,但如果原始工作表的名称特别长,则可能会成为问题。

 Sub NewSheetFromTemplate() Dim sht As Worksheet Sheets("TEMPLATE").Copy After:=sheets("MyFirstSheet") Set sht = Sheets("TEMPLATE (2)") sht.Name = Range("B16").Value End Sub 

您不能通过复制方法创build工作表的实例。 既然你知道你在哪里放置新的工作表,你可以在复制后find它,并重命名它。 你非常接近:

 Sheets("TEMPLATE").Copy After:=Sheets("MyFirstSheet") Sheets(Sheets("MyFirstSheet").Index + 1).Name = Sheets("TEMPLATE").Range("B16").Value 

确保你在B16范围内有一个值。

希望这可以帮助,

干杯。