我在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
答案 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)
。这有点快。