我想将工作表的副本分配给变量,供以后使用。
首先:以下代码运行正常。我希望实现这样的东西,但使用worksheet.copy
。
Sub DuplicateSheetRenameFirst()
Dim wsDuplicate As Worksheet
Set wsDuplicate = Worksheets.Add
wsDuplicate.Name = "Duplicate"
End Sub
第二:使用复制方法,在当前工作簿中创建工作表,但会生成运行时错误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
第三:在新工作簿中创建工作表(因此创建book,然后创建工作表),但仍会生成相同的运行时错误424 - 需要对象。
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
解决方法:我可以修改任何第二或第三方式,首先复制工作表,然后将变量设置为activesheet,但是,如果有一步这样做,我就会徘徊。我不确定这是否会一直有效,因为活动表可能不是刚才复制的那个。可能。
是否有简单的(一步)方法将工作表的副本存储在变量中?最好没有错误或没有使用错误处理程序过滤错误。
答案 0 :(得分:2)
这可能还好吗?
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
在上一篇文章中有一些进一步的解释:
Why does Worksheet.Copy not return a reference to the new workbook created
在MSDN
中,该方法不会返回任何内容,这一点并不明显:
https://msdn.microsoft.com/EN-US/library/office/ff837784.aspx
...但在您朋友的Excel对象资源管理器中,这一点更为明显。如果它返回了一个工作表对象,则箭头将显示为:
子副本([之前],[之后])作为工作表