我在VBA中有这个功能,一切正常,除非它到达For
循环时它只是崩溃,我必须关闭Excel和所有内容,不确定如何解决它。
Private Sub checkDuplicates(x As Worksheet)
Dim n As Integer, i As Long, j As Long
Sort x
addheader x, "checkDup."
n = searchHeader(x, "checkDup.")
x.Columns(n) = 1
For i = 50 To 3 Step -1
For j = 1 To 5
If Not x.Cells(i, j) = x.Cells(i - 1, j).Value Then
x.Cells(i, n) = 0
Exit For
End If
Next j
Next i
End Sub
答案 0 :(得分:4)
非常努力并在紧密循环中访问单元格值,这是 唯一最慢的VBA代码可以做的事情,而你正在为一个大的细胞数量。
等一下。 Excel“没有响应”,因为它正在忙着运行你的循环并跟上正在进行的所有更新。
以下是可以帮助它更快完成的事情:
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.EnableEvents = False
' your code here
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.EnableEvents = True
如果在更合理的时间内没有完成,那么你需要研究一种基于数组的方法,在这种方法中将有趣的范围转储到内存数组中,对数组进行处理,修改数组值,然后在一次写入中将数组转储到工作表。