2017-04-25 195 views
0

背景故事:我正在做一个小项目,帮助我的小团体帮助人们拥有清晰易懂的会计系统。 我是VBA的总新手,我一直在寻找一个简单的解决方案,在论坛上没有成功:/VBA Excel复制和粘贴模板

我的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不会在所有复制的新表。它会生成一个带有模板的新工作簿。

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

+0

您想复制名为“template”的工作表并创建一个新的工作表,并在其中包含数据,并将其命名为Range(“P21”)?但在哪个表中存在Range(“P21”)?在“Compta”或“模板”中? –

+0

无论如何,看看我的答案和下面的代码,看看它是否按照你的意图工作 –

+0

是的值范围(“P21”)来自Compta,我填写所有的基本数据来个性化模板。代码工作非常好,谢谢你 –

回答

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 
+0

是的它的工作原理,我只需要修改两件事情,它的工作到完美。代码是可以理解和优雅的。非常感谢!:)) –

+0

@JeanCule不用客气,现在通过点击答案旁边的灰色复选标记(它会变成绿色),将其标记为“答案” –

0

每当我被卡在VBA中,我只是调出宏工具栏并记录一个宏。这会生成VBA代码,您可以在Excel中的VBA代码区域内检查该代码。然后,看看录制的宏产生的代码是什么,也许稍微调整一下。有可能你不想复制整个工作表,而是在工作表内定义一个选择并复制它。

+0

你好,我一直在试图做到这一点。问题是我想让它自动化,因为代码将不知道我打算在未来中创建什么样的项目名称。 - >工作表(projname)。选择。有没有办法通过使用变量来调用特定的工作表?谢谢:)) –