如何从模板

时间:2016-10-14 08:42:00

标签: excel vba excel-vba

在VBA中,我希望在第一张工作表后从模板创建一个新工作表。

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

我的VBA代码:

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

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

3 个答案:

答案 0 :(得分:2)

我认为创建Worksheet对象只是为了重命名它是非常必要的。试试这样:

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

答案 1 :(得分:1)

以下代码行不会返回一个对象,一个已创建,但不会返回给VBA:

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

这意味着您无法将此行代码设置为对象。相反,尝试以下两种选择之一:

使用索引

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

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

答案 2 :(得分:0)

您无法通过复制方法创建工作表的实例。由于您知道放置新工作表的位置,因此您可以在复制后找到它并重命名。你非常接近:

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

确保您拥有B16范围内的值。

希望这有帮助,

干杯。