在手动计算模式下更新图表(Excel for Mac 2016)

时间:2018-02-22 20:23:37

标签: excel vba excel-vba excel-vba-mac

我有一个大型工作簿,我正在尝试构建报告,包括多个图表。工作簿必须处于手动计算模式才能工作。我已将计算划分为不同的表格,并编写了vba脚本以在不同的表格组合上运行计算。我遇到的问题是,在运行这些脚本后,我所拥有的图表将不会更新。数据会更新,如果我手动进入图表并选择数据"并重新选择相同的数据,然后他们将更新。有没有办法在脚本结束时自动执行此操作?我在不同的论坛上尝试了不同的建议,但似乎没有任何效果。这是我目前正在使用的代码,但它不会更新图表:

Sub Calculate1()

  Sheets("Sheet 1").Calculate 'Sheet with calculations
  Sheets("Sheet 2").Calculate 'Sheet referencing final numbers from sheet 1, and displaying graphs

  Dim co As ChartObject
  For Each co In Sheets("Sheet 2").ChartObjects
     co.Chart.Refresh
     DoEvents
  Next co
End Sub

感谢您花时间去看看!我正在运行Excel for Mac 2016.在其他论坛上提出的一个建议是暂时将计算模式设置为自动,但这对我来说不是一个选项,因为这会使程序崩溃。

2 个答案:

答案 0 :(得分:0)

您应该能够在循环后添加co.calculate。您也可以在循环之前更改Application.Calculation = xlAutomatic,然后在循环后更改回Application.Calculation = xlManual

答案 1 :(得分:0)

此代码段应该有效:

' Force the charts to update
Set sht = ActiveSheet
For Each co In sht.ChartObjects
    co.Activate
    For Each sc In ActiveChart.SeriesCollection
        sc.Select
        temp = sc.Formula
        sc.Formula = "=SERIES(,,1,1)"
        sc.Formula = temp
    Next sc
Next co

积分https://stackoverflow.com/a/11581258/2707864

这也可能有用(YMMV):

Worksheets("Sheet 2").Cells.WrapText=False 
' Run your calculations
Worksheets("Sheet 2").Cells.WrapText=True

积分https://stackoverflow.com/a/7211065/2707864

另见

Refresh all charts without blinking(和this comment)。

Excel chart won't update