1

コードをステップ実行すると、「Cells(r_count, 5) = temp + totalDays」という行の後、「For c_count」ループの先頭に戻り、コードが次の部分に到達しないため、カウンターはインクリメントされません。

For c_count = 7 To 42 Step 5
    For r_count = 4 To 80
        If Cells(r_count, c_count) = "pass" Then
            If Not (IsEmpty(Cells(r_count, (c_count + 1)))) Then
                If Not (IsEmpty(Cells(r_count, (c_count + 2)))) Then
                    s_date = Cells(r_count, (c_count + 1))
                    e_date = Cells(r_count, (c_count + 2))
                    totalDays = DateDiff("d", s_date, e_date)
                    temp = Cells(r_count, 5)
                    Cells(r_count, 5) = temp + totalDays
                End If
            End If
        End If
    Next r_count
Next c_count

私は自分のコードで何かばかげたことを監督しなければなりません。複数のステートメントではなく、IF ステートメントを 1 つにする必要がありますか? 何か助けはありますか?

4

1 に答える 1

2

このコードは、Worksheet_Change イベントによって呼び出されているのでしょうか? Cells(r_count, 5) = temp + totalDays行で最初に戻ると言っているので、そうしていると思います-これは、この行がセルの値を設定し、それによって Worksheet_Change イベントをトリガーし、それが最終的に終了する理由でもあります。

その場合、更新の実行中に Application.EnableEvents を False に設定できます (実際には Philip の提案)。例えば:

Private Sub Worksheet_Change()

    Application.EnableEvents = False

    ....your code here....

    Application.EnableEvents = True

End Sub
于 2012-12-27T17:07:28.483 に答える