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
这可能有点帮助。