2014-01-21 121 views
4

是否可以使用VBA複製工作表並保存對其的引用?我知道我可以做以下工作,以保持對新工作表的引用,但我必須跟蹤索引,並且似乎應該已經有內置的東西可以做到。您可以複製工作表並保留對新工作表的引用嗎?

Dim newws as Worksheet 
Dim oldws as Worksheet 

' set oldws to whatever I need, then 
oldws.Copy Before:=Worksheets(1) 
Set newws = Worksheets(1) 

但是這純粹是清潔,如果這樣的事情是可利用的,像它的Worksheets.Add

' You can do this 
Set newws = Worksheets.Add  

' But definitely not this, because Sheets.Copy doesn't return anything. 
Set newws = oldws.Copy Before:=1 

我想我可以寫我自己的函數:

Function CopyAWorksheet(ws As Worksheet, Before As Worksheet) As Worksheet 
    ws.Copy Before:=Before 
    Set CopyAWorksheet = Worksheets(Before.Index - 1) 
End Function 

我可以添加一個After參數,並使BeforeAfter變體都能像我想要的那樣動作,但似乎我只是m發佈已經內置到Excel VBA中的東西。如果有一些有趣的技術原因,這是不可能的,我也很想聽到這些。

我使用Excel 2010中

回答

2

首先,可能最簡單的選項 - 當您複製片新副本成爲活動工作表,因此,你可以做這樣:

oldws.Copy Before:=Sheets(1) 
set newws = Activesheet 
+0

當我做那我得到'運行時錯誤424:對象需要.'這是否適合你? –

+0

我已經添加了第一個可能的解決方案,讓我檢查一下可選代碼是否適用於我,因爲我不經過檢查就手寫它。 –

+0

我不認爲第二種方法... [從文檔](http://msdn.microsoft.com/en-us/library/office/ff835605.aspx),它看起來不像'ws .Copy'返回一個值,所以你會把'newws'設置爲空。如果你可以驗證第二種方法**可以工作,或者將它從你的答案中拿出來,我會以ActiveSheet的方式接受你的答案,這比我做得更好。 –

相關問題