2017-04-25 197 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)。選擇。有沒有辦法通過使用變量來調用特定的工作表?謝謝:)) –