VBA Excel复制和粘贴模板

时间:2017-04-25 11:56:38

标签: excel vba excel-vba templates

背景故事:我正在做一个小项目,这个项目是为了帮助人们拥有一个清晰易懂的会计系统。 我是VBA的新手,我一直在论坛中寻找一个简单的解决方案而没有成功:/

我的Excel文件基本上有两个主电源表。 Compta:输入数据的地方 型号:模板

我想要的结果是,当我按下“Compta”上的按钮时,它会生成一个新的工作表,其上粘贴有模板,并且我已经决定了该名称。

Sub lala()
'part one creating new sheet with "P21" the name of the sheet
Dim projname As Range
Set projname = Range("P21")
ActiveWorkbook.Sheets.Add Before:=Worksheets(Worksheets.Count)
ActiveSheet.Name = projname

'part two copying and pasting the template on the new sheet
Sheets("Model").Activate
ActiveSheet.Copy
'this is the line where my problem is residing 
Worksheets(projname).Select
Selection.Paste

End Sub

我的问题是,当它正在执行时,我的第一部分进展顺利,但第2部分根本没有复制在新工作表上。它会生成一个包含模板的新工作簿。

有没有简单的解决方案?我知道有一个,但我不能把手指放在上面..

2 个答案:

答案 0 :(得分:0)

每当我陷入VBA时,我只需调出宏工具栏并录制宏。这会生成您可以在Excel内的VBA代码区域内检查的VBA代码。然后只需看看录制的宏生成的代码是什么,也许稍微调整一下。您可能不希望复制整张工作表,而是在工作表中定义一个选项并复制该工作表。

答案 1 :(得分:0)

尝试以下代码,无需使用ActivateSelectSelection,这会降低代码运行时间。

Option Explicit

Sub lala()

Dim projname As Range
Dim TmpltSht As Worksheet
Dim NewSht  As Worksheet

Set TmpltSht = ThisWorkbook.Sheets("template")
Set projname = Sheets("Compta").Range("P21")

' copy the template sheet
TmpltSht.Copy Before:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
Set NewSht = ActiveSheet
NewSht.Name = projname.Value ' <-- set the name of the new copied sheet

End Sub