运行VBA时仍使用excel
我用vba写了一些代码 当我运行它时,Excel暂时停止响应-指针变为忙碌符号,我无法向下滚动 我想在代码运行时继续使用Excel。 我怎样才能做到这一点 代码如下:运行VBA时仍使用excel,vba,scroll,wait,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 -
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
numRowB=getRow(“B”)
numRowL=getRow(“L”)
对于i=6到numRowB
计数=计数+1
Application.StatusBar=“处理”&计数&“/”和numRowB-6&“项目”
对于j=6到numRowL
如果RE6(范围(“B”&i).Value)=RE6(范围(“L”&j).Value),则
范围(“A”&i)。值=计数
范围(“K”和j)。值=计数
如果是范围(“B”和i).值范围(“L”和j).值,则
重拨数据(计数2)
arrData(count2)=范围(“L”和“j”).值
count2=count2+1
范围(“A”和“i”).Interior.ColorIndex=46
范围(“K”和“j”).Interior.ColorIndex=46
其他的
范围(“A”和i).Interior.ColorIndex=4
范围(“K”和“j”).Interior.ColorIndex=4
如果结束
退出
如果结束
下一个
下一个
您不能。为了您的最大利益,Excel宏将尽快完成。为了提高其性能并减少闪烁,请在宏的开头使用Application.ScreenUpdate=false
,在宏的结尾使用Application.ScreenUpdate=true
挑剔:如果查询单个单元格,可以使用单元格(行、列)。这将接受整数作为参数,因此
范围(“K”&i)
将更改为单元格(i,11)
。这要快一点。你不能。为了您的最大利益,Excel宏将尽快完成。为了提高其性能并减少闪烁,请在宏的开头使用Application.ScreenUpdate=false
,在宏的结尾使用Application.ScreenUpdate=true
挑剔:如果查询单个单元格,可以使用单元格(行、列)。这将接受整数作为参数,因此
范围(“K”&i)
将更改为单元格(i,11)
。这要快一点。将DoEvents
放在第二个for循环中。这将允许Excel在代码点击DoEvents
命令时响应鼠标和键盘输入,这应该是非常常见的
警告:如果您实际使用了DoEvents
,您还应该确保指定使用范围调用的工作表(通常您应该这样做)。您可以按照以下思路进行操作:
Dim sheet As Worksheet
Set sheet = ActiveSheet
With sheet
'Your code goes here...
end With
然后确保使用
.Range
而不是Range
,这样即使用户更改了工作表,它也会更新正确的工作表。将DoEvents
放在第二个for循环中。这将允许Excel在代码点击DoEvents
命令时响应鼠标和键盘输入,这应该是非常常见的
警告:如果您实际使用了DoEvents
,您还应该确保指定使用范围调用的工作表(通常您应该这样做)。您可以按照以下思路进行操作:
Dim sheet As Worksheet
Set sheet = ActiveSheet
With sheet
'Your code goes here...
end With
然后确保使用
.Range
而不是Range
,这样即使用户更改了工作表,它也会更新正确的工作表。此外,最明显的是在之前使用Application.Calculation=xlCalculationManual
,之后使用Application.Calculation=xlCalculationAutomatic
。当工作簿的大小合适时,这会大大加快宏的速度。这取决于他的工作表是否有很多公式。如果是的话,这肯定会发生变化,尽管在这种情况下我会保存当前值。我通常处理那些只有数据的工作表,所以这超出了我的范围。不过,感谢您的提及。我使用的表格包含数百个大范围的公式(范围内有10-40k个单元格),因此这是自然产生的!:D您不能
此外,最明显的方法是在之前使用Application.Calculation=xlCalculationManual
和之后使用Application.Calculation=xlCalculationAutomatic
。当工作簿的大小合适时,这会大大加快宏的速度。这取决于他的工作表是否有很多公式。如果是的话,这肯定会发生变化,尽管在这种情况下我会保存当前值。我通常处理那些只有数据的工作表,所以这超出了我的范围。不过,感谢您的提及。我使用的表格包含数百个大范围的公式(范围内有10-40k个单元格),因此这是自然产生的!:D您不能
+1获取正确答案,也不能在使用DoEvents时注意
+1获取正确答案,也不能在使用DoEvents时注意