在Excel中启用WrapText时,运行ClearContents的性能非常慢

我在Excel 2007 VBA中debugging下面的代码,这看起来很简单。 由于某种原因,大约需要30分钟来处理900行数据。 我想我已经缩小到一些单元格格式,特别是WrapText选项。 有什么我在这里丢失,可以提高性能时删除这些行。

Sub ClearContentsOfActive() Application.EnableEvents = False Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Dim NumLines NumLines = ActiveSheet.UsedRange.Rows.Count Range("2:" & NumLines + 3).Select Selection.ClearContents Selection.Delete Shift:=xlUp Application.EnableEvents = True Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic End Sub 

此外,用户在Excel 2003中没有遇到这些延迟,具有相同的代码。 提前致谢

更新

为了响应ClearContents行的冗余,这是在Excel 2003中工作的原始代码,这就是为什么我离开它。 评论这条线是我尝试的第一件事,因为我同意这可能是多余的。 请参阅下面的我的性能指标。

testing1

 Selection.ClearContents ''// Takes ~30 mins Selection.Delete Shift:=xlUp ''// then this takes <1min 

TEST2

 'Selection.ClearContents '// If this line is commented Selection.Delete Shift:=xlUp ''// then this line takes ~30 mins 

我相信它与WrapTextfunction有关的原因是因为当你清除WrapText行时,它会在行上执行AutoFit操作。 我认为隐藏屏幕更新或禁用事件会有所帮助。

调用.Delete之前实际上是否需要调用.ClearContents? 在我看来,对.ClearContents的调用是多余的。 您正在清空一系列单元格中的值,您只需将其从下一行中移除即可。

我不知道这是否会对性能问题有所帮助,但值得一试。

编辑:回应你的更新,如何避免select,只是做以下几点:

 Range("2:" & NumLines + 3).Delete shift:=xlUp 

你也可以尝试提前摆脱文字包装:

 Range("2:" & NumLines + 3).WrapText = False Range("2:" & NumLines + 3).Delete shift:=xlUp 

所以它似乎与单元格的ColorIndex属性有关,而不是WrapText特征。 该页面的macros有以下代码

 For r = 0 to 1000 For c = 0 to 15 Sheets.Cells(r, c).ColorIndex = 14 Next c Next r 

我build议用户使用ConditionalFormatting,将所有macros都一起closures,并解决他的性能问题。

条件格式是基于整个表格上的一个公式,如果以下评估为真,那么这个公式将变成黄色

 =IF(ROW()>10, FALSE, LEN($A1)>0)