我在 Excel 2007 VBA 中调试以下代码,这看起来很简单。由于某种原因,处理 900 行数据大约需要 30 分钟。我想我已经把它缩小到一些单元格格式,特别是 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 中工作的原始代码,这就是我离开它的原因。评论这条线是我尝试的第一件事,因为我同意它可能是多余的。有关我的伪性能指标,请参见下文。
测试1
Selection.ClearContents ''// Takes ~30 mins
Selection.Delete Shift:=xlUp ''// then this takes <1min
测试2
'Selection.ClearContents '// If this line is commented
Selection.Delete Shift:=xlUp ''// then this line takes ~30 mins
我认为它与 WrapText 功能有关的原因是,当您清除它执行的 WrapText 行和行上的 AutoFit 操作时。我认为隐藏屏幕更新或禁用事件会有所帮助。