您可以复制工作表并保留对新工作表的引用吗?

时间:2014-01-21 15:11:23

标签: excel vba excel-vba

是否可以使用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变体,这样它就会像我想要的那样动作,但似乎我只是错过了一些东西已经内置到Excel VBA中。如果有一些有趣的技术原因,这是不可能的,我也很乐意听到这些。

我正在使用Excel 2010。

1 个答案:

答案 0 :(得分:2)

首先也可能是最简单的选项 - 当您复制工作表时,新副本将成为活动工作表,因此您可以这样做:

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