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

DoEvents2 番目の for ループ内に配置します。DoEventsこれにより、コードがコマンドにヒットするたびに、Excel がマウスとキーボードの入力に応答できるようになります。

警告:実際に を使用する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 に答える