在运行VBA时仍然使用excel

时间:2012-10-06 12:25:32

标签: vba scroll wait

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

2 个答案:

答案 0 :(得分:4)

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

警告:如果您实际使用DoEvents,还应确保指定使用Range调用的工作表(通常应该执行此操作)。你可以通过以下方式做一些事情来做到这一点:

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

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

答案 1 :(得分:0)

你做不到。 Excel宏将尽快完成,这符合您的最佳利益。为了提高效果并减少闪烁,请在开头使用Application.ScreenUpdating=false,在宏的末尾使用Application.ScreenUpdating=true

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