0

我遇到了一些我以前从未见过的东西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
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 回答