在我的2007 Excel加载项中,我有一个例程,它将工作表从加载项复制到用户ActiveWorkbook。当我运行例程时,执行这行代码需要15-20秒:
ThisWorkbook.Sheets(roadwayQuantTemplate).Copy Before:=ActiveWorkbook.Sheets(1)
此备用版本具有相同的延迟:
ThisWorkbook.Sheets(roadwayQuantTemplate).Copy Before:=Worksheets(1)
有没有人知道为什么执行这条线需要这么长时间?我有另一个例程,添加一个空白工作表(然后修改它)和下面的代码行,但没有任何延迟:
ActiveWorkbook.Worksheets.Add Before:=Worksheets(1)
Copy
方法执行的时间是否比Add
方法要长得多?我正在复制的模板工作表中没有很多数据,只有少数单元构成工作表的标题,少于100个空单元格并应用了格式。
有什么想法吗?
答案 0 :(得分:0)
工作表副本将复制附加到该工作表的VBA代码,因此,例如,如果您的工作表具有以下代码(或任何其他可能在复制时触发的代码),那么您会看到延迟:
Private Sub Worksheet_Activate()
Dim i As Long
For i = 1 To 100000
Debug.Print "hello again"
Next i
End Sub
工作表副本还可以选择格式,图片,图表等。如果只需要单元格值,最快的方法是将工作表的Worksheet.UsedRange分配给变量数组,然后将该数组分配回目标范围。新张(相同尺寸)。
答案 1 :(得分:0)
使用独立模板可能会更快,而不是加载项中的工作表。语法是
Worksheets.Add(类型:= TemplatePathAndFileName)