当使用VB.NET时,Application.ScreenUpdating = False时出现小故障,没有异常

时间:2013-06-06 16:47:22

标签: vb.net excel vsto off-by-one

我遇到了一些我以前从未见过的东西,Application.ScreenUpdating = False,导致一个小小的行为不端。它不会引发错误,但会在打开时导致结果中出现一个错误。

    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

1 个答案:

答案 0 :(得分:0)

问题实际上是在试图取得这个价值。由于工作簿中的该单元格正在计算列中使用项目的次数,因此在整个For循环完成之前,它不会更新。因此,我可以抑制1次迭代的屏幕更新并使其工作,但是当我不得不更改多个工作表时,该值的更新失败(尽管它似乎在多次迭代时更新了几次)。

对此的修复非常简单,告诉Excel“刷新”或计算所需公式中的值。因此,对于上面的示例,您将使用:

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

现在你需要小心,因为这不会导致在该单元格中引用的单元格更新(如果它们也有公式)。如果您需要更新一组单元格,则可以通过不指定单元格来更新整个工作表:.Cells.Calculate或者您可以使用Application.CalculateFull()

重新计算所有内容