在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说我“语法错误”,但为什么?
答案 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)”。这仍然是识别新工作表的有用方法,但如果原始工作表的名称特别长,则可能会成为问题。
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范围内的值。
希望这有帮助,
干杯。