1

我有一张以看起来不错的形状显示数据的表格。这些形状只是引用数据暂存表中的一个单元格。暂存区中的数据正在使用 getpivotdata 公式查找数据。

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

问题是,虽然枢轴数据正在更改并重新计算,但由于尚未计算新字段,因此我的形状会根据旧值不断更改其颜色。

我已经尝试过 DoEvents 但对它的作用几乎没有经验并且没有运气。我不想延迟一个固定的时间,因为那太可怕了。在调用我的 updateColours 宏之前,我也尝试调用 StagingSheet.calculate,但没有成功。

有任何想法吗?

4

2 回答 2

0

您可以尝试 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

那可能行得通。

于 2013-04-24T18:36:40.087 回答
0

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

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

    Do Until Application.CalculationState = xlDone
        DoEvents
    Loop

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

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

于 2013-04-25T09:59:30.950 回答