Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
运行VBA时仍使用excel_Vba_Scroll_Wait - Fatal编程技术网

运行VBA时仍使用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 -

我用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
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时注意