gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 20:20:50 26 4
gpt4 key购买 nike

我在 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 操作时。我认为隐藏屏幕更新或禁用事件会有所帮助。

最佳答案

在调用.Delete之前真的有必要调用.ClearContents吗?在我看来,对 .ClearContents 的调用是多余的。您正在清空一系列单元格中的值,您只需在下一行中将其从存在中删除。

我不知道这是否有助于解决性能问题,但值得一试。

编辑:响应您的更新,如何避免选择,只需执行以下操作:

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

您还可以尝试提前摆脱文本换行:
Range("2:" & NumLines + 3).WrapText = False
Range("2:" & NumLines + 3).Delete shift:=xlUp

关于excel - 在 Excel 中启用 WrapText 时,运行 ClearContents 的性能非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/678493/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com