VBA嵌套用于循环崩溃

时间:2016-05-24 20:50:39

标签: excel vba excel-vba

我在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

1 个答案:

答案 0 :(得分:4)

根据评论对话here您的代码没有“崩溃”

非常努力并在紧密循环中访问单元格值,这是 唯一最慢的VBA代码可以做的事情,而你正在为一个大的细胞数量。

等一下。 Excel“没有响应”,因为它正在忙着运行你的循环并跟上正在进行的所有更新。

以下是可以帮助它更快完成的事情:

Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.EnableEvents = False

' your code here

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.EnableEvents = True

如果在更合理的时间内没有完成,那么你需要研究一种基于数组的方法,在这种方法中将有趣的范围转储到内存数组中,对数组进行处理,修改数组值,然后在一次写入中将数组转储到工作表