2014-01-21 61 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的方式接受你的答案,这比我做得更好。 –

相关问题