Excelmacros慢许多工作表

在工作中,我使用Excel中的VBAmacros,对于表中的每一行,它需要生成一个具有特定格式的单一表格。

我有一个运行正常的工作代码,但是我得到的问题是,每个新工作表需要更长的时间才能以二次方速度复制,这意味着整个过程将按照行数的三次方进行缩放,而不是可以接受的。

用不同的方法运行时间:

用不同的方法运行时间

我一直在对代码的不同部分进行计时,并得出结论,问题是时间增加是文档中纸张数量的函数(如果在创build新文档之前删除每个新表格,则时间不会增加二次方)。 创build一个新的工作表,然后从模板工作表复制似乎有点快,但是是一个边际的改善和生成的工作表没有正确的格式。

这是我的代码的相关部分:

Application.ScreenUpdating = False CalcState = Application.Calculation Application.Calculation = xlCalculationManual Application.DisplayStatusBar = False Application.EnableEvents = False ActiveSheet.DisplayPageBreaks = False For i = start To end ' Create new sheet from template Worksheets("Template").Copy After:=Worksheets(numsheets) numsheets = numsheets + 1 ' Change sheet's name item_index = Worksheets("Table").Cells(i, item).Value name = "Item " & item_index ActiveSheet().Name = name ' Insert data Worksheets(name).Range("I30").Value = i End If Next i Application.ScreenUpdating = True Application.Calculation = CalcState Application.EnableEvents = True Application.DisplayStatusBar = True 

有没有什么办法来优化这个,所以我不会在运行时间得到这个立方的增加?

谢谢!

Write Option Explicit On在子行开始之前,在代码的最顶端。

直接在子行之后放置Application.ScreenUpdating = False。

直接在End Sub行之前放置Application.ScreenUpdating = True。

声明所有的variables。

使用variablesvariables的转换函数。

我会先把所有的名字加载到一个数组中,以避免单独引用它们,例如:

 `dim arrNames As variant Set arrNames = range(*itemlist*).value` 

另外,在项目浏览器中,我会将模板重命名为wksTemplate,以使引用速度更快。 我想你可以在创build时为每张表单设置一个引用:

 Set wksNew = wksTemplate.copy.... Then use that reference: With wksNew .name = arrNames(I,1) .range("I30").value = i End with 

这可能有点帮助。