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

时间:2013-04-24 13:09:57

标签: excel excel-vba refresh delay vba

我有一张工作表显示形状数据看起来不错。这些形状仅引用数据登台表中的单元格。暂存区域中的数据使用getpivotdata公式来查找数据。

在我的显示表上显示向用户显示值的形状,还有一个组合框可以更改数据透视表。更改数据透视表时,它会更新暂存区域中的数据,从而更改显示工作表中形状的数据。然后我调用一个宏,如果> 0则将形状设置为绿色,如果< 0。

,则设置为红色

问题在于,当枢轴数据正在改变并重新计算时,我的形状会根据旧值改变颜色,因为尚未计算新字段。

我已经尝试过DoEvents,但对它的功能缺乏经验,没有运气。我不想在固定的时间内延迟,因为那太可怕了。我还尝试在调用updateColours宏之前调用StagingSheet.calculate,但没有成功。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

您可以尝试Application.ScreenUpdating = false。 E.g:

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

这可能有效。

答案 1 :(得分:0)

因此,为了确保在调用颜色更改之前计算值,我使用以下宏来使应用程序等到计算结束。

Sub WaitForCalculate()
    Application.Cursor = xlWait
    Application.EnableEvents = False

    Do Until Application.CalculationState = xlDone
        DoEvents
    Loop

    Application.EnableEvents = True
    Application.Cursor = xlDefault
End Sub

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