0

これまでに見たことのない現象に遭遇したApplication.ScreenUpdating = Falseため、潜水艦がわずかに誤動作しました。エラーにはなりませんが、on にすると結果に off by one エラーが発生します。

    Try
        'Globals.ThisWorkbook.Application.ScreenUpdating = False
        'if this on sub behaves unexpectedly
        For n = 13 To Globals.ThisWorkbook.Worksheets.Count

            Globals.ThisWorkbook.Worksheets(n).Activate()
            Call ESLAUpdateReportPosition(True)

        Next
        'Globals.ThisWorkbook.Application.ScreenUpdating = True

    Catch ex As Exception
        '...Error Handling
    End Try

繰り返しますが、例外はスローされません。の結果はわずかに間違っています。メソッド内で壊れていると思われる場所は次のとおりです。

   SumCount1 = CurrentSheet.Cells(2, 6).value
4

1 に答える 1

0

実際、問題はその値を取得しようとすることにあります。ブック内のそのセルは、項目が列で使用された回数をカウントしているため、Forループ全体が完了するまで更新されません。したがって、1回の繰り返しで画面の更新を抑制して機能させることはできましたが、複数のシートを変更する必要がある場合、その値の更新に失敗しました(ただし、多くの繰り返しで数回更新されたようです)。

これに対する修正は非常に簡単です。必要な数式の値を「更新」または計算するように Excel に指示します。したがって、上記の例では、次を使用します。

    CurrentSheet.Cells(2, 6).Calculate()
    SumCount1 = CurrentSheet.Cells(2, 6).value

これにより、そのセル内で参照されているセルが更新されないため、注意する必要があります (数式も含まれている場合)。多数のセルを更新する必要がある場合は、セルを指定せずにシート全体を更新.Cells.Calculateできます。または、すべてを再計算することもできますApplication.CalculateFull()

于 2013-06-06T16:47:21.800 に答える