2

我在vba中写了一些代码。

当我运行它时,Excel 暂时停止响应 - 指针变为忙碌符号,我无法向下滚动。

我想在此代码运行时继续使用 Excel。我怎样才能做到这一点?

这是代码:

numRowB = getRow("B")
numRowL = getRow("L")
For i = 6 To numRowB
    count = count + 1
    Application.StatusBar = "Processing " & count & "/" & numRowB - 6 & " items."
    For j = 6 To numRowL
        If RE6(Range("B" & i).Value) = RE6(Range("L" & j).Value) Then
            Range("A" & i).Value = count
            Range("K" & j).Value = count
            If Range("B" & i).Value <> Range("L" & j).Value Then
                ReDim Preserve arrData(count2)
                arrData(count2) = Range("L" & j).Value
                count2 = count2 + 1
                Range("A" & i).Interior.ColorIndex = 46
                Range("K" & j).Interior.ColorIndex = 46
            Else
                Range("A" & i).Interior.ColorIndex = 4
                Range("K" & j).Interior.ColorIndex = 4
            End If
            Exit For
        End If
    Next
Next
4

2 回答 2

4

放置DoEvents在您的第二个 for 循环中。这将允许 Excel 在代码命中命令时响应鼠标和键盘输入DoEvents,这应该是相当频繁的。

警告:如果您实际使用DoEvents,您还应该确保指定使用 Range 调用的工作表(无论如何您通常都应该这样做)。您可以通过以下方式执行此操作:

Dim sheet As Worksheet
Set sheet = ActiveSheet
With sheet
     'Your code goes here...
end With

然后确保使用.Range而不是Range,这样即使用户更改工作表,它仍然会更新正确的工作表。

于 2012-10-06T14:45:06.780 回答
0

你不能。Excel 宏将尽快完成符合您的最大利益。为了提高其性能并减少闪烁,请在宏Application.ScreenUpdating=false的开头和结尾使用。Application.ScreenUpdating=true

挑剔:如果要查询单个单元格,则可以使用 Cells(row,column) 。这接受整数作为参数,因此Range("K" & i)将更改为Cells(i,11). 这有点快。

于 2012-10-06T14:08:32.487 回答