Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
以手动计算模式更新图表(Excel for Mac 2016)_Excel_Vba_Macos - Fatal编程技术网

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

以手动计算模式更新图表(Excel for Mac 2016),excel,vba,macos,Excel,Vba,Macos,我有一个很大的工作簿,我正试图从中构建报告,包括多个图表。工作簿必须处于手动计算模式才能工作。我已将计算划分为不同的工作表,并编写了vba脚本以在不同的工作表组合上运行计算。我遇到的问题是,在我运行这些脚本之后,我拥有的图形将不会更新。数据确实会更新,如果我手动进入图表并“选择数据”,然后重新选择相同的数据,那么它们将更新。是否有一种方法可以在脚本结束时自动执行此操作?我在不同的论坛上尝试了不同的建议,但似乎没有任何效果。以下是我目前正在使用的代码,但它不会更新图形: Sub Calculate

我有一个很大的工作簿,我正试图从中构建报告,包括多个图表。工作簿必须处于手动计算模式才能工作。我已将计算划分为不同的工作表,并编写了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

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

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

此代码段应该可以:

' 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
学分:

这也可能有效(YMMV):

学分:

另见

(和)


ChartObjects似乎无法使用
.Calculate
方法。我收到一条“编译错误:找不到方法或数据成员”消息。切换回自动计算会使整个过程花费5分钟以上,或者使excel崩溃——这就是我开始手动计算的原因。你能计算整个工作表而不是图表对象吗?或者是图表。刷新?如果我的第一篇文章让人困惑,我很抱歉。“表1”中有大量原始数据集的计算。“表2”仅从该表中获取一小部分有效值,将其显示在一系列可呈现的表格和相关图表中。因此,
工作表(“工作表2”).Calculate
行完成了您的建议,但这不会更新图表。我还尝试过第二次计算“表2”,但它不会更新图表。有没有办法不使用
。在
sc
对象上选择
方法?我希望将工作表保护起来,然后选择“将不起作用”。否则效果会很好!我一定忽略了那个评论。。。谢谢你的回复。@mcflame-我建议你试试。它看起来并不那么重要。我删除了sc.select,它在没有保护工作表的情况下也可以工作。但是有了保护(即使没有保护对象),现在我得到了sc.Formula方法的运行时错误。我不明白为什么这会受到工作表保护的影响。@mcflame-Me-meither,我现在无法尝试,我目前正在Ubuntu下工作。没问题。谢谢你的帮助!现在我只是在刷新的两端运行
ActiveSheet.Unprotect
ActiveSheet.Protect
。工作很好,只希望有一个更优雅的解决方案。
Worksheets("Sheet 2").Cells.WrapText=False 
' Run your calculations
Worksheets("Sheet 2").Cells.WrapText=True