使用ListRows.Item(i).Delete从Excel表中删除行时速度很慢

时间:2011-01-17 12:17:24

标签: excel excel-vba vba

我正在使用VBA从其他数据的子集填充Excel“表格”范围。

获取数据的速度很快(来自缓存数组或来自另一个工作表中数据的SQL查询),但添加和删除速度很慢。

With Worksheets("Overview").ListObjects("OverviewServiceTable")

    For i = .ListRows.Count To 1 Step -1
        .ListRows(i).Delete
    Next

    For i = 0 To UBound(cache)
        Set NewRow = .ListRows.Add(AlwaysInsert:=True)
        NewRow.Range.Cells(1, 1).Value = cache(i)
    Next

End With

使用一些基本的分析,每行最多需要添加和删除行。是否有更快的方法来清除和更新这样的表?否则,我将使用“普通”单元格范围,格式化看起来很漂亮,但随后自动过滤器之类的好东西将会消失。

感谢。

3 个答案:

答案 0 :(得分:5)

您可以尝试将计算设置为手动,并在代码运行时关闭屏幕更新

Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False

your code here

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

答案 1 :(得分:2)

我遇到了同样的问题,但关闭计算,屏幕更新等对我来说并不适用。在搜索网页并调整我的VBA超过一个小时之后,这是我的解决方法:

Range("NamedTable").Clear
Range("NamedTable").RemoveDuplicates Columns:=1

第一行清除表中名为“NamedTable”的所有行,留下标题行(如果存在)。

第二行利用了表格中的所有单元格现在都是空白的事实,并删除了所有重复的行(分析第一列中的“重复”)

答案 2 :(得分:1)

我知道,这有点晚了但是......

listobject.DataBodyRange.Rows.Delete

为未来的用户提供一点帮助; o)