Excel图表不会更新
我有一个Excel文档(2007年)与图表(集群列),从包含计算值的单元格获取其数据系列
计算的值不会直接改变,而只是由于工作表中的其他单元格发生更改
当我更改工作表中的其他单元格时,将重新计算Data Series单元格,并显示新值 – 但基于此Data Series的Chart将拒绝自动更新
我可以通过保存/closures来更新图表,或者切换其中一个设置(例如反转x / y轴然后放回),或者通过重新select数据系列
我在网上find的每个解决scheme都不起作用
- 是的,我将“计算”设置为自动
- Ctrl + Alt + F9更新一切正常,除了图表
- 我已经多次在不同的计算机上重新创build图表
-
我已经尝试过VBA脚本:
Application.Calculate
Application.CalculateFull
Application.CalculateFullRebuild
ActiveWorkbook.RefreshAll
DoEvents
这些都没有更新或刷新图表
我注意到,如果我input数据系列的实际数字而不是计算,它将更新图表 – 这就好像Excel不想识别计算中的更改
有没有人经历过,或知道我可以做什么来解决这个问题? 谢谢
我遇到了同样的问题 – 不知道为什么,什么时候发生,我得到的图表强制更新的唯一方法是改变图表定义本身,这可以很容易地通过VBA,如下所示:
Dim C As ChartObject: Set C = Me.ChartObjects("chart name") C.Chart.ChartTitle.Text = C.Chart.ChartTitle.Text + "1"
问题的底部可能会有更好的答案,但我认为这可能有帮助。 在工作表上,我会做一个快速的Ctrl-X,一个图表(或整个事情)的Ctrl-V强制更新图表。
这是我发现的一贯更新图表的唯一的事情。 它削减了问题的根本原因(我认为):系列数据被caching在图表中。 通过强制图表重新评估系列,我们正在清除caching。
' 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
我有一个简单的饼图相同的问题。
没有一个macros的工作,我试过。 没有什么工作, cut
, pasting
, relocating
图表。
我发现的解决方法是编辑图表文本,删除标签,然后重新select标签。 一旦他们重新出现,他们被更新。
这是一个荒谬的错误,严重阻碍了我与Excel的工作。
基于贴出来的工作,我来到以下行动作为简单的方式前进…
点击你想更新的图表 – selectCTRL-X,CTRL-V来剪切和粘贴图表…它将被强制更新。
我有这个问题,通过VBA
生成1000 +图。 我生成了图表,并为他们的系列分配了一个范围。 但是,当重新计算图表时,数据范围更改值不会更新。
解决scheme – >我在生成graphics的For … Next Loop之前closuresWrapText,然后在循环之后再次打开它。
Workbooks(x).Worksheets(x).Cells.WrapText=False
之后…
Workbooks(x).Worksheets(x).Cells.WrapText=True
这是一个很好的解决scheme,因为它可以一次更新1000多个graphics,而无需循环遍历所有graphics并单独更改。
另外,我不太清楚为什么这个工作。 我想WrapText更改数据范围的一个属性,使graphics更新,虽然我没有关于此的文档。
这对我来说非常好 – 它在所有的图表上翻转坐标轴,然后翻转它们,这使得它们在不改变的情况下刷新。
'Refresh all charts For Each mysheet In ActiveWorkbook.Sheets mysheet.Activate For Each mychart In ActiveSheet.ChartObjects mychart.Activate ActiveChart.PlotArea.Select ActiveChart.PlotBy = xlRows ActiveChart.PlotBy = xlColumns ActiveChart.PlotBy = xlRows Next Next
这是一个已知的Excel错误…
最好和最快的解决方法是Columns.AutoFit
– 技巧:
Sub Update_Charts() Application.ScreenUpdating = False Temp = ActiveCell.ColumnWidth ActiveCell.Columns.AutoFit ActiveCell.ColumnWidth = Temp Application.ScreenUpdating = True End Sub
我有另一个刷新图表的问题。 当自动生成图表时,一些图表出现在表格上并caching文本。 这恰好是刷新生成的图表的问题。 当我放大或缩小时,我可以得到预期的结果。 所以我在这里发布解决scheme,如果它感兴趣的人。 以编程方式,我生成图表后添加了这个:
ActiveWindow.Zoom = ActiveWindow.Zoom + 1 ActiveWindow.Zoom = ActiveWindow.Zoom - 1
我面临同样的问题。 这个问题是由于限制在没有。 在您的工作表中计算的公式。 你可以用两种方法解决它:
手动重新计算:
Press SHEFT + F9
macros强制重新计算:将下面的代码添加到更改数据的函数的末尾
Activesheet.Calculate
我发现它的解决scheme:从Excel选项请确保更改计算选项如下。 在excel中繁重的工作之后,它有时会变成手动的。
这个问题很可笑! 没有人的解决scheme在2010年为我工作,但我基于帕斯卡尔的我的基础:
Dim C As ChartObject Set C = ActiveSheet.ChartObjects("CTR_Chart") C.Chart.SetSourceData Source:=Range( _ "KeywordBreakdown!$A$8:$A$12,KeywordBreakdown!$E$8:$E$12")
简单地重新定义了源数据范围。 如果它是一个命名的范围,那么可以认为是相当干净的。 我想最好的解决scheme是不断试图修改不同的图表属性,直到它刷新。
好的,我有一个解决scheme,真的….
我发现我的图表问题首先发生在我隐藏了一些数据列喂食图表后,并在图表的“select数据源”消息框中选中“显示隐藏在行和列中的数据”)。
我发现如果我回到“select数据源”信息框并取消选中/重新检查图表刷新的“显示数据隐藏在行和列”。
以编程方式,我将以下内容插入到一个将链接到一个button的macros中,它将足够快速地刷新所有图表,以便为已知的错误提供解决方法。 此代码假定每个工作表都有一个图表,但是如果需要,还可以添加另一个图表1到N的语句:
Sub RefreshCharts() Application.ScreenUpdating = False For I = 1 To ActiveWorkbook.Worksheets.Count Worksheets(I).Activate ActiveSheet.ChartObjects("Chart 1").Activate ActiveChart.PlotVisibleOnly = True ActiveChart.PlotVisibleOnly = False Next I Application.ScreenUpdating = True End Sub
这对我有效,它削减和重新粘贴活动工作表上的图表。 我基于Jason的代码和我在Googlesearch中find的博客文章 。
Sub RepasteCharts() Dim StrTemp As String Dim IntTempTop As Integer Dim IntTempLeft As Integer Set sht = ActiveSheet For Each co In sht.ChartObjects 'Activate the chart co.Activate 'Grab current position on worksheet IntTempTop = ActiveChart.Parent.Top IntTempLeft = ActiveChart.Parent.Left 'Cut and paste ActiveChart.Parent.Cut ActiveSheet.Paste 'Reposition to original position ActiveChart.Parent.Top = IntTempTop ActiveChart.Parent.Left = IntTempLeft Next co End Sub
从Excel 2013开始,有Chart.Refreh
方法( https://msdn.microsoft.com/de-de/library/office/ff198180.aspx )为我工作:
Dim cht As ChartObject For Each cht In ThisWorkbook.ActiveSheet.ChartObjects cht.Chart.Refresh Next cht
我自己花了半天时间。
我有一个macros,它改变了图表数据的值。 在Excel 2003中,所有工作都正常,但在Excel 2007中,图表似乎失去了与其数据的所有连接,但手动更改两列中的数据值会触发重新计算。
我的解决scheme是在更改数据之前使活动工作表中的所有图表都不可见,然后再次使其可见并调用图表刷新以获得更好的效果。 (它似乎只是可见的图表,有这个问题更新)。
这适用于我,也处理与图表以及图表对象类似的问题。 刷新可能不是必要的 – 需要更多的testing。
Dim chrt As Chart Dim chrtVis As XlSheetVisibility Dim sht As Worksheet Dim bChartVisible() As Boolean Dim iCount As Long Dim co As ChartObject On Error Resume Next Set chrt = ActiveChart If Not chrt Is Nothing Then chrtVis = chrt.Visible chrt.Visible = xlSheetHidden End If Set sht = ActiveSheet If Not sht Is Nothing Then ReDim bChartVisible(1 To sht.ChartObjects.Count) As Boolean iCount = 1 For Each co In sht.ChartObjects bChartVisible(iCount) = co.Visible co.Visible = False iCount = iCount + 1 Next co End If
做macros观的东西,改变数据
If Not sht Is Nothing Then iCount = 1 For Each co In sht.ChartObjects co.Visible = bChartVisible(iCount) co.Chart.Refresh iCount = iCount + 1 Next co End If If Not chrt Is Nothing Then chrt.Visible = chrtVis chrt.Refresh If chrt.Visible Then chrt.Select End If End If On Error GoTo 0
我和海报有同样的问题。 基本上我正在运行一个仪表板,我有一堆命名的范围填充了一些UDF的返回值。 在仪表板上,有一些饼图将数据序列绑定到包含这些命名范围的单元格(如果数据系列目标单元格直接包含UDF,绕过命名范围,也会出现该问题。
例如,我更改了一个单元格值,其中包含date范围,以便将仪表板打开,并强制计算命名的范围和UDF。 但是,饼图不会更新 – 出于某种原因,其他types的图表也可以。 顺便说一句,这些是图表对象,而不是图表。 无论如何,让我们切入解决scheme:
我不想明显改变图表标题或其他方面,无论如何,我注意到这并没有一贯地更新我的图表。 有时候我第一次触发计算时,饼会更新,但随后的计算表明饼不会。 但是,我注意到,每次我在仪表板工作的代码中进行了更改。 从而:
解:
With ActiveWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule .AddFromString "'test" .DeleteLines 1 End With
如果您正在使用Workbook模块(我不是这种情况下),只需创build一个新的模块并引用它。
上周我的工作遇到了同样的问题,当时我在工作表上增加了一些计算。 之后,使用单选buttonselect要在graphics上显示的数据不会再更新graphics。
目前为止我能find的最好的解释是: http : //support.microsoft.com/kb/243495
如果我理解正确的话,如果在文件中有超过65536个具有另一个单元格作为参考的公式,Excel将开始优化计算,并且在某些情况下,graphics不会再正确更新。
如果在不使用VBAmacros的情况下有一个解决方法,我会很高兴听到(不能使用这些文件需要通过没有VBAmacros的SharePoint共享)。
我的工作是使用macros插入/删除图表的数据表中的列。 这将导致图表更新数据select。
我发现这是解决这个问题的最快方法。
在完成一个教程的时候,我遇到了同样的问题(当你按照步骤操作,没有得到预期的结果时,非常沮丧)。
创build饼图的教程要求我select范围A3:A10
,然后select不相邻的范围E3:E10
。 我这样做了。 我得到了图表。
然后,它要求我改变一个值并观察百分比变化,然后看看饼图并查看更新。
它没有更新。
我查看了饼图的数据源,范围很奇怪。 它有适当的A3:A10
范围表示,但E10
单元格引用重复了几次,并且所有的E
单元格都以随机顺序列出。 它看起来像
=SERIES(,(Revenue!$A$3:$A$10,Revenue!$E$3,Revenue!$E$10,Revenue!$E$10,Revenue!$E$10,Revenue!$E$10,Revenue!$E$10,Revenue!$E$9,Revenue!$E$8,Revenue!$E$7,Revenue!$E$6,Revenue!$E$5,Revenue!$E$4),1
我将数据源更改为:
=SERIES(,Revenue!$A$3:$A$10,Revenue!$E$3:$E$10,1)
问题解决了。 有时候这是清理代码的一个问题,所以计算处理器的sorting很less。
我也在努力解决这个问题。 最后通过重新计算自定义函数重新计算后具有图表数据的工作表来解决此问题。 所以,在表1中,我有一个包含的单元格
=ComputeScore()
在VBA模块中,函数被定义为“易失性”,以确保ComputeScore()在对电子表格进行任何更新之后运行。
Function ComputeScore() As Double Application.Volatile True . . . do some stuff to get a total . . . ComputeScore = theTotal End Function
然后,在Sheet 1的VBA中,这个:
Private Sub Worksheet_Calculate() 'Recalculate the charts data page to force the charts to update. 'Otherwise, they don't update until the next change to a sheet, and so 'chart data is always one update behind the user's data changes. Application.ScreenUpdating = False Application.EnableEvents = False Application.Calculation = xlManual Sheets("Charts Data").Calculate Application.Calculation = xlAutomatic Application.EnableEvents = True Application.ScreenUpdating = True End Sub
因此,由于Worksheet_Calculate()在ComputeScore()重新计算后触发,因此,引用Sheet 1的自定义函数单元的名为Charts Data的表将在ComputeScore()函数更新Sheet 1的单元格后执行重新计算。 图表数据的这一额外一轮计算会导致图表立即更新,而不是稍后或根本不更新。 EnableEvents和xlManual的设置保持无限循环和其他事件发生。
这可能看起来非常基本,但我只是试图手动计算电子表格中的图表(通过按F9),它的工作! Tha VBA的代码很简单:
计算
;)
我有这个问题,发现这是由于有两个Excel应用程序在同一时间运行。 如果我closures了所有内容并打开了文件,那么我就遇到了dynamic的图表问题。 也许这有帮助
当我尝试了几乎所有的解决scheme,因为没有一个在我的情况下工作,我也会在这里添加我的两分钱。 希望它可以帮助别人。
在这个问题上的共识似乎是,我们需要以某种方式强制excel重画图,因为它不应该这样做。
我的解决scheme是杀死X轴数据,并将其replace为无,然后将其更改为我想要的数据。 在这里我的代码:
With wsReport .Activate .ChartObjects(1).Activate ActiveChart.FullSeriesCollection(1).XValues = "=" 'Kill data here .Range("A1").Select 'Forwhatever reason a Select statement was needed .ChartObjects(1).Activate ActiveChart.FullSeriesCollection(1).XValues = "=tblRef[Secs]" End With End Sub
我的这两个美分这个问题 – 我有一个类似的问题与Access 2010报告的图表。 我dynamic地构build了一个querydef,将其设置为我的报表中的rowsource,然后尝试遍历每个系列并设置每个系列的属性。 我最终必须做的是将querydef的创build和属性设置分解为不同的子目录。 另外,我把一个
SendKeys ("{DOWN}") SendKeys ("{UP}")
在两个潜艇的底部。
在更改源数据的值时,图表没有相应更新。 刚刚closures所有excel的实例并重新启动,问题就消失了。
我有一个类似的问题 – 图表似乎没有更新。 我尝试了这个线程上的一切,但没有运气。 我终于意识到,我正在复制和粘贴的图表与源数据相关联,这就是为什么他们都显示相同的结果。
确保你在复制和粘贴图片之前,通过所有其他动作….
我只是有同样的问题,也发现只有当我input不好的数据(字符而不是数字),行才会显示。 这导致该行出现,但是改回有效数据导致它再次消失。
我发现的是,如果我双击该行(出现不良数据),它显示出它出于某种原因在SECONDARY轴上。 将其更改为PRIMARY轴解决了我的问题。
图表并不是“感觉”的变化,直接插入价值macros观sorurce细胞。 您必须从图表单元格中发送值,然后使用这样的代码
。工作表( “工作表Sheet”)范围( “A1:K1”)=工作表( “Sheet 2中”)范围。( “A4:K4”)值
我今天遇到了一个类似的问题,2010年有大量公式和几个数据库连接的文件。 未更新引用的图表轴与隐藏列相似,与此链中的其他列相似,标签显示dynamic数据的月和年“MMM-YY”。 我尝试了除VBA选项之外的所有解决scheme,因为我宁愿在没有代码的情况下解决。
我能够通过将我的date(轴标签)封装在TEXT公式中来解决问题,例如:= TEXT(A10,“MMM-YY”)。 当值改变时,所有东西都立即更新。 再次快乐的日子!
从阅读上面的其他贡献者的问题,我开始认为,图表是专门针对DATE数据types的问题,因此,使用TEXT函数将值转换为文本解决了我的问题。 希望这可以帮助你。 只需更改双引号(TEXT函数的第二个参数)内的格式以满足您的需求。
只要激活图表:
Sheets(1).Activate
and your problem disappears.
I had the same problem and none of the things you mentioned in question worked for me until I just activated sheet. The accepted answer didn't work for me neither.
Alternatively you can make:
ActiveCell.Activate
For me the macro didn't update the x-axis for all series, but only the first one. The solution I found was to update the x-axis for all series and then it refrehsed (also I had code to change the format of the x-axis, but I don't think that that was the problem).
ActiveSheet.ChartObjects("Diagram 7").Activate ActiveChart.Axes(xlCategory).Select ActiveChart.SeriesCollection(1).XValues = "={""""}" ActiveChart.SeriesCollection(1).XValues = "=YYY!$BQ$85:$BQ$8844" ActiveChart.SeriesCollection(2).XValues = "=YYY!$BQ$85:$BQ$8844" ActiveChart.SeriesCollection(3).XValues = "=YYY!$BQ$85:$BQ$8844" ActiveChart.SeriesCollection(4).XValues = "=YYY!$BQ$85:$BQ$8844" ActiveChart.SeriesCollection(5).XValues = "=YYY!$BQ$85:$BQ$8844" ActiveChart.SeriesCollection(6).XValues = "=YYY!$BQ$85:$BQ$8844" ActiveChart.SeriesCollection(7).XValues = "=YYY!$BQ$85:$BQ$8844" ActiveChart.SeriesCollection(8).XValues = "=YYY!$BQ$85:$BQ$8844"
Full macro;
Sub TEST() ' ' TEST Makro ' ActiveSheet.ChartObjects("Diagram 7").Activate ActiveChart.Axes(xlCategory).Select Selection.TickLabels.NumberFormat = "@" ActiveSheet.ChartObjects("Diagram 7").Activate ActiveChart.SeriesCollection(1).XValues = "={""""}" ActiveChart.SeriesCollection(1).XValues = "=YYY!$BQ$85:$BQ$8844" ActiveChart.SeriesCollection(2).XValues = "=YYY!$BQ$85:$BQ$8844" ActiveChart.SeriesCollection(3).XValues = "=YYY!$BQ$85:$BQ$8844" ActiveChart.SeriesCollection(4).XValues = "=YYY!$BQ$85:$BQ$8844" ActiveChart.SeriesCollection(5).XValues = "=YYY!$BQ$85:$BQ$8844" ActiveChart.SeriesCollection(6).XValues = "=YYY!$BQ$85:$BQ$8844" ActiveChart.SeriesCollection(7).XValues = "=YYY!$BQ$85:$BQ$8844" ActiveChart.SeriesCollection(8).XValues = "=YYY!$BQ$85:$BQ$8844" ActiveChart.Axes(xlCategory).Select ActiveChart.Axes(xlCategory).TickMarkSpacing = 730 ActiveChart.Axes(xlCategory).TickLabelSpacing = 730 End Sub