【发布时间】:2019-02-20 15:19:32
【问题描述】:
我在 Excel 中构建了一个宏,它将来自多个输入选项卡的输入存储到数据库中(表格格式)。作为宏的一部分,我包含了一个 Sub 以删除给定年份 (CYear) 的任何先前条目,然后再为该年份编写新条目。
在工作簿的大小增加到大约 10MB 之前,这一直运行良好。代码的以下部分现在需要超过 1 小时才能运行。还有其他更快的方法吗?
Application.ScreenUpdating = False 和 Application.Calculation = xlCalculationManual 包含在较大的 Sub 中,r 将接近数千行。
Dim r As Long
Sheets("Database").Activate
For r = ActiveSheet.UsedRange.Rows.Count To 1 Step -1
If Cells(r, "G") = Range("C5") Then
ActiveSheet.Rows(r).EntireRow.Delete
End If
Next
【问题讨论】:
-
尝试使用
Sheets("Database").而不是 activesheet。不确定,但您正在使用两种不同的方法来访问单元格内容,不确定您是否将range("c5").value设置为变量,然后检查cells(r,"G")或range("G" & r)。 -
用
Union构建一个Range,然后再构建一个Delete。