在条件格式化之前刷新单元格值

我有一个工作表,显示形状的数据看起来不错。 这些形状只是引用数据分段表中的单元格。 暂存区域中的数据使用getpivotdata公式来查找数据。

在我的显示板上,向用户显示值的形状,还有一个combobox可以更改数据透视表。 数据透视表更改后,它将更新暂存区域中的数据,从而更改显示页上形状的数据。 然后我调用一个macros来设置形状为绿色,如果> 0或红色,如果<0。

问题是,虽然透视数据正在改变,正在重新计算,我的形状保持其颜色根据旧的值改变,因为新的领域还没有计算。

我已经尝试了DoEvents,但是对于它的function并没有什么经验,并且没有运气。 我不想拖延一段固定的时间,因为那太可怕了。 我也尝试调用我的updateColoursmacros之前调用StagingSheet.calculate没有成功。

有任何想法吗?

你可以尝试Application.ScreenUpdating = false。 例如:

Sub AllWorkbookPivots() Dim pt As PivotTable Dim ws As Worksheet Application.ScreenUpdating = False Application.EnableEvents = False For Each ws In ActiveWorkbook.Worksheets For Each pt In ws.PivotTables pt.RefreshTable Next pt Next ws Application.ScreenUpdating = True Application.EnableEvents = True End Sub 

这可能工作。

所以要确保在调用颜色更改之前计算值,我使用下面的macros来使应用程序等待,直到完成计算。

 Sub WaitForCalculate() Application.Cursor = xlWait Application.EnableEvents = False Do Until Application.CalculationState = xlDone DoEvents Loop Application.EnableEvents = True Application.Cursor = xlDefault End Sub 

不是很漂亮,但完成工作。