将工作表的COPY存储在工作表variables中

我想实现的是:

我想将工作表的副本分配给variables,供以后使用。

我试过的和结果

第一:下面的代码工作正常。 这样的事情,我想实现,但使用worksheet.copy

 Sub DuplicateSheetRenameFirst() Dim wsDuplicate As Worksheet Set wsDuplicate = Worksheets.Add wsDuplicate.Name = "Duplicate" End Sub 

第二:使用复制方法在当前工作簿中创build工作表,但生成运行时错误424 – 必需的对象

 Sub DuplicateSheetRenameSecond() Dim wsDuplicate As Worksheet Set wsDuplicate = Worksheets("Sheet1").Copy(after:=Worksheets(Worksheets.Count)) 'above line : runtime error 424 object required, but the sheet is created wsDuplicate.Name = "Duplicate" End Sub 

第三:在新工作簿中创build一个工作表(创build工作簿,然后工作表),但仍然生成相同的运行时错误

 Sub DuplicateSheetRenameThird() Dim wsDuplicate As Worksheet Set wsDuplicate = Worksheets("Sheet1").Copy 'above line : runtime error 424 object required, but the sheet is created in new workbook wsDuplicate.Name = "Duplicate" End Sub 

解决方法:我可以修改任何第二种第三种方式,首先复制表单,然后将variables设置为活动表格,但是如果有这样一个步骤的方式,我正在游荡。 我不知道这是否会一直工作,因为activesheet可能不是刚刚复制的那个。


问题:

有一个简单的(一步)的方式来存储工作表的副本在一个variables? 最好没有错误或没有过滤error handling程序的错误。

这也许可以吗?

 Sub copySheet() Dim ws As Excel.Worksheet Excel.ThisWorkbook.Sheets("Sheet1").Copy After:=Sheets(1) Set ws = Excel.ThisWorkbook.ActiveSheet End Sub 

不幸的是,在这种情况下,您需要使用Active...对象。 通常最好避免使用Active...对象。

作为方法,你不能这样做.copy不返回工作表类的对象:

 Sub copySheet() Dim ws As Excel.Worksheet Set ws = Excel.ThisWorkbook.Sheets("Sheet1").Copy(After:=Sheets(1)) End Sub 

一些进一步的解释是在这之前的文章:
为什么Worksheet.Copy不返回对创build的新工作簿的引用

MSDN ,这个方法没有任何回应:
https://msdn.microsoft.com/EN-US/library/office/ff837784.aspx

…但在你的朋友Excel的对象浏览器中更明显。 如果它返回一个工作表对象,那么通过箭头将读取:

子副本([之前],[之后]) 作为工作表

在这里输入图像说明