我遇到了一些我以前从未见过的东西,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
答案 0 :(得分:0)
问题实际上是在试图取得这个价值。由于工作簿中的该单元格正在计算列中使用项目的次数,因此在整个For
循环完成之前,它不会更新。因此,我可以抑制1次迭代的屏幕更新并使其工作,但是当我不得不更改多个工作表时,该值的更新失败(尽管它似乎在多次迭代时更新了几次)。
对此的修复非常简单,告诉Excel“刷新”或计算所需公式中的值。因此,对于上面的示例,您将使用:
CurrentSheet.Cells(2, 6).Calculate()
SumCount1 = CurrentSheet.Cells(2, 6).value
现在你需要小心,因为这不会导致在该单元格中引用的单元格更新(如果它们也有公式)。如果您需要更新一组单元格,则可以通过不指定单元格来更新整个工作表:.Cells.Calculate
或者您可以使用Application.CalculateFull()