我在为Excel 2003编写的VBA宏中遇到了很大的问题。它从其他文件中导入了一些数据。结果是Excel文件的文件大小(行数/列数)随着每个导入的文件而增加。在Excel 2003中,前50个导入文件的运行速度非常快,然后速度变慢。但是对于Excel 2010,即使对于少量文件也需要相当长的时间。问题在于一个执行多次的语句:
Sheets("Sheetname").Rows(LastRow).Insert Shift:=xlDown
当文件变大时,Excel 2010中的这一行将花费近一秒的时间。当我手动添加一行时,我遇到了同样的问题。
我会做一些通常的事情来提高性能:
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
ActiveSheet.DisplayPageBreaks = False
ActiveSheet.AutoFilterMode = False
提前感谢您的帮助。我很确定其他人已经遇到过这个问题。
答案 0 :(得分:2)
问题是我应用了条件格式。对于添加到报表中的每个新行,都会创建一个新的条件格式规则来为一行中的单元格着色,每个行的颜色相同(例如,格式规则为"如果当前列A中的单元格行包含'启用'然后使单元格变为绿色") 在Excel 2003中,如果将Application.Calculation设置为manual或者条件格式的处理方式不同(我不知道),则条件格式似乎不会重新计算。 知道这一点后,我手动为整个列创建了条件格式规则,这些规则必须被着色并删除代码以从电子表格中为单个单元格着色。现在,Excel 2010中的东西运行得很快 我想知道是否有可能提交错误报告(如果Application.Calculation设置为手动,则禁用条件格式重新计算)。
答案 1 :(得分:1)
使用Insert很慢,因为它迫使Excel完成大量工作。将一大块数据直接从变量写入工作表会快得多 如果您想在底部保留一些公式,例如总计,那么将公式块复制到变量中,将数据写入工作表,调整公式然后在结尾处将其写回来会更快。 如果您有其他公式引用添加数据的工作表,您可以使用动态范围名称来引用数据,或使用普通范围名称来引用总公式。
答案 2 :(得分:0)
派对有点晚,但首先导入所有数据,然后为范围添加格式/条件格式,而不是每条记录添加新的条件格式。
答案 3 :(得分:-1)
非常奇怪。...插入行很快。然后,我对一系列行进行了排序,结果变得非常慢。我删除了UsedRange之后的行,再次可以!