2011-02-04 518 views
16

我有一個圖表(簇狀柱形圖)的Excel文件(2007年),從包含計算值Excel圖表不會更新

的計算值永遠不會直接改變細胞中獲取數據系列,但僅作爲結果在片改變其他細胞的

當我改變其他細胞的表,數據系列細胞被重新計算,並顯示新的價值 - 但是基於此數據系列的圖表拒絕自動更新

我可以通過保存/關閉來更新圖表,或者切換其中一個設置(例如反轉x/y軸,然後pu擬合回),或重新選擇數據系列

每個解決方案,我發現在網上不起作用

  • 是的,我有計算設置爲自動
  • 按Ctrl + Alt + F9更新一切都很好,除了圖表
  • 我已經重新創建圖表幾次,並在不同的計算機
  • 我試圖像VBA腳本:

    Application.Calculate
    Application.CalculateFull
    Application.CalculateFullRebuild
    ActiveWorkbook.RefreshAll
    DoEvents

這些更新的無或刷新圖表

我也注意到,如果我輸入了我的數據系列,實際數字來代替計算,它會更新圖表 - 就好像Excel不想識別計算中的更改

有沒有人經歷過這個或知道我可以做什麼來解決這個問題? 謝謝

+0

你使用什麼類型的圖表? – Stewbob 2011-02-04 20:53:26

+0

啊是忘記提及,它是一個集羣柱形圖 – samJL 2011-02-04 20:57:26

+3

屬於超級用戶。與編程無關。 – 2011-02-04 21:40:54

回答

4

我遇到了同樣的問題 - 不知道爲什麼,什麼時候發生,我得到圖表強制更新的唯一方法是改變圖表定義本身的某些內容,這很容易完成通過VBA在:

Dim C As ChartObject: Set C = Me.ChartObjects("chart name") 
C.Chart.ChartTitle.Text = C.Chart.ChartTitle.Text + "1" 

有可能是一個更好的答案,以達到問題的底部 - 但我認爲這可能有所幫助。在圖紙上工作時,我會在圖表的一部分(或整體)上做一個快速的Ctrl-X,Ctrl-V來強制圖表更新。

+5

要小心使用`+'進行字符串連接!應該使用`&`。 – 2011-08-25 07:56:32

0

剛剛在這個自己花了半天時間。

我有一個宏改變了圖表數據的值。在Excel 2003中,所有工作都正常,但在Excel 2007中,圖表似乎失去了與其數據的所有連接,但手動更改兩列中的數據值會觸發重新計算。

我的解決方案是在數據更改之前使活動工作表上的所有圖表不可見,然後再次使其可見並調用圖表刷新以實現良好的度量。 (它似乎只是可見的更新此問題的圖表)。

這適用於我,也處理與圖表以及圖表對象類似的問題。刷新可能不是必要的 - 需要更多的測試。

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 

做好宏觀的東西,改變了數據

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 
1

這個問題太荒謬了!沒有一個解決方案在2010年爲我工作,但我根據我的斷tpascale年代:

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") 

簡單地重新定義了源數據範圍。如果它是一個有名望的範圍,那麼可以想象它會相當乾淨。我想最好的解決方案是繼續嘗試修改不同的圖表屬性,直到它刷新。

4

我有這個問題,而通過VBA生成1000+圖。我生成了圖表併爲其系列分配了一個範圍。但是,重新計算圖表時,由於數據範圍更改值不會更新。

解決方案 - >在生成圖形然後在循環之後再次打開它的For ... Next Loop之前,我關閉了WrapText。

Workbooks(x).Worksheets(x).Cells.WrapText=False 

後...

Workbooks(x).Worksheets(x).Cells.WrapText=True 

這是一個很好的解決方案,因爲它更新一次1000+圖表,而無需通過所有這些循環和單獨改變的東西。

另外,我不太確定爲什麼這個工作;我想當WrapText更改數據範圍的一個屬性時,它會更新圖表,但我沒有關於此的文檔。

3

這是一個荒謬的錯誤,嚴重阻礙了我使用Excel的工作。

基於變通貼我來到了以下行動作爲前進的simplist方式工作...

單擊圖表你想更新 - 選擇CTRL-X,CTRL-V剪切和粘貼圖表就位...它將被強制更新。

0

我和海報有同樣的問題。基本上我正在運行一個儀表板,並且我有一堆命名區域,這些命名區域用來自某些UDF的返回值填充。在儀表板上,有一些餅圖將數據序列綁定到包含這些命名範圍的單元格(如果數據系列目標單元格直接包含UDF,繞過命名範圍,也會出現此問題。

我更改了一個單元格值,其中包含例如日期範圍以使儀表板位於其上,並且命名範圍和UDF被強制計算。但是,餅圖不會更新 - 出於某種原因,其他類型的圖表也可以。順便說一句,這些是圖表對象,而不是圖表。無論如何,讓我們切入解決方案:

我不想明顯改變圖表標題或其他方面,無論如何,我注意到這並沒有持續更新我的圖表。有時候我第一次觸發計算時,餡餅會更新,但隨後的計算表明餡餅不會。但是,我注意到每次我在儀表板工作的代碼中進行了更改。因此:

解決方案:

With ActiveWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule 

    .AddFromString "'test" 
    .DeleteLines 1 

End With 

如果您使用的工作簿模塊(我是不是在這種情況下),剛剛創建的,而不是一個新的模塊和參考。

0

上週我面對我的工作同樣的問題,當我增加了一些計算,我的表。之後,使用單選按鈕選擇要在圖形上顯示的數據不會再更新圖形。

我已經能夠迄今爲止找到的最好的解釋是這樣的: http://support.microsoft.com/kb/243495

如果我的理解是正確的,如果有超過65536周的公式有另外一個細胞在你的文件的引用,Excel啓動以優化計算,並且在某些情況下圖不再正確更新。

如果有解決類似的問題,而無需使用VBA宏,我會很高興地聽到,(如文件需要通過SharePoint沒有VBA宏共享不能使用那些)。

2

這工作對我非常好 - 它翻轉所有圖表軸,然後翻轉他們回來,這使他們在不改變所有刷新。

'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 
11

這是我發現能夠不斷更新圖表的唯一的事。它削減了問題的根源(我認爲):系列數據被緩存在圖表中。通過強制圖表重新評估系列,我們正在清除緩存。

' 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 
-1

我發現通過在單獨的工作表中創建圖表,將會應用任何更新。 HTH

2

這是一個已知的Excel漏洞...

最好最快的解決方法是Columns.AutoFit - 絕招:

Sub Update_Charts() 
    Application.ScreenUpdating = False 
    Temp = ActiveCell.ColumnWidth 
    ActiveCell.Columns.AutoFit 
    ActiveCell.ColumnWidth = Temp 
    Application.ScreenUpdating = True 
End Sub 
4

我有同樣的問題用一個簡單的餅圖。

我試過的宏都沒有工作。沒有任何工作在cutpasting,relocating圖表。

我找到的解決方法是編輯圖表文本,去掉標籤,然後重新選擇標籤。一旦它們重新出現,它們就會被更新。

0

什麼工作對我來說是使用宏以插入/數據表中刪除一列圖表。這將導致圖表更新數據選擇。

我發現這是解決它的最快方式。

2

我有另一個刷新圖表的問題。自動生成圖表時,一些圖表會顯示在表格上並緩存文本。這恰好是刷新生成的圖表的問題。當我放大或縮小時,我可以得到預期的結果。所以我在這裏發佈解決方案,如果它感興趣的人。 編程,我加入這個生成圖表後:

ActiveWindow.Zoom = ActiveWindow.Zoom + 1 
ActiveWindow.Zoom = ActiveWindow.Zoom - 1 
0

我有同樣的問題,通過教程工作時(非常令人沮喪,當你遵循的步驟,並沒有得到預期的結果)。

創建餅圖的教程希望我選擇範圍A3:A10,然後還選擇非相鄰範圍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) 

問題解決了。有時候,這是清理代碼的問題,因此計算處理器的整理工作量較少。

0

我也在努力解決這個問題。最後,通過在自定義函數重新計算後重新計算具有圖表數據的工作表來解決此問題。因此,在表1,我有一個包含

=ComputeScore() 

在VBA模塊的單元,該函數被定義爲揮發性,保證ComputeScore()的任何更新到電子表格後運行。

Function ComputeScore() As Double 
    Application.Volatile True 
    . . . do some stuff to get a total . . . 
    ComputeScore = theTotal 
End Function 

然後,在表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 

所以,命名爲圖表的數據表,它引用表1的自定義功能的細胞,會做一個重新計算ComputeScore AFTER ()函數更新了Sheet 1的單元格,因爲Worksheet_Calculate()會在ComputeScore()重新計算後觸發。圖表數據的這一額外一輪計算會導致圖表立即更新,而不是稍後或根本不更新。 EnableEvents和xlManual的設置會使無限循環和其他事件發生。

0

這可能看起來非常基本,但我只是試圖手動計算電子表格中的圖表(通過按F9),它的工作原理!它THA VBA代碼很簡單:

計算

;)

1

好,我有一個解決方案,真的....

我發現,發生與我的圖表沒有首先更新問題不久之後,我隱藏了一些數據列供給圖表,並在圖表的「選擇數據源」消息框中選中「顯示隱藏在行和列中的數據」)。

我發現如果我回到「選擇數據源」消息框並取消選中/重新檢查圖表刷新的「顯示數據隱藏在行和列中」。

以編程方式將以下內容插入到我將按鈕鏈接到的宏中,它將足夠快速地刷新所有圖表以解決已知錯誤的解決方法。此代碼假定每個工作表一個圖表,但另一個是語句圖表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 
0

我有這個問題,並發現它是由在同一時間運行兩個Excel應用程序引起的。如果我關閉了所有內容並且只打開了文件,那麼我在圖表中遇到了動態問題。也許這有幫助

2

我面臨同樣的問題。這個問題是由於限制在沒有。計算出的公式在您的工作表中。您可以通過兩種方式解決它:

人工力量重新計算:

Press SHEFT + F9 

宏強制重新計算: 下面的代碼添加到函數結束這改變了數據

Activesheet.Calculate 

我找到了解決方案: 從Excel選項麥確保如下更改計算選項。在excel中繁重工作之後,它有時會改爲手動。

Auto Calculation

0

正如我試過幾乎所有提出的解決方案,並因爲沒有我的情況下工作,我將添加我的兩分錢在這裏。希望它可以幫助別人。

在這個問題上的共識似乎是,我們需要以某種方式強制excel重繪圖,因爲它不應該當它應該。

我的解決方案是殺死X軸數據並將其替換爲無,然後將其更改爲我想要的數據。在這裏我的代碼:

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 
0

我的這個問題的兩美分 - 我有一個類似的問題與Access 2010報告的圖表。我動態地構建了一個querydef,將它設置爲我的報告中的rowsource,然後嘗試遍歷每個系列並設置每個系列的屬性。我最終必須做的是將querydef創建和屬性設置分解爲單獨的子文件。此外,我把一個

SendKeys ("{DOWN}") 
SendKeys ("{UP}") 

在兩個潛艇的每一個的底部。

-1

我們發現了一個不涉及VBA的解決方案:將圖表數據範圍的某個元素乘以TODAY()-TODAY()+1

即使沒有這個範圍重新計算,TODAY()的揮發性會以某種方式給它一個額外的提升,從而觸發圖表重新計算。

0

在更改源數據的值時,圖表沒有相應更新。剛關閉所有excel實例並重新啓動,問題就消失了。

0

我有一個類似的問題 - 圖表似乎沒有更新。我嘗試了這個線程上的所有內容,但都沒有運氣。我終於意識到,我正在複製和粘貼的圖表與源數據相關聯,這就是爲什麼他們都顯示相同的結果。

一定要複製你經歷所有其他動議之前粘貼圖片....

0

我有同樣的問題,而且還發現,如果我把壞的數據線將只顯示(字符而不是數字)。這導致該行出現,但改回有效數據導致它再次消失。

我發現的是,如果我雙擊該行(出現壞數據),它顯示出它出於某種原因在SECONDARY軸上。將其更改爲PRIMARY軸解決了我的問題。

0

圖表不是「感覺」的變化,直接插入值與宏觀sorurce細胞。您必須從圖表單元格中發送值,然後使用此代碼

工作表(「sheet1」)。範圍(「A1:K1」)=工作表(「sheet2」)。範圍(「A4:K4」) 。值

1

這對我有用,它會削減並重新粘貼活動工作表上的圖表。我基於Jason的代碼和我在Google搜索中找到的blog post

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 
0

我有一個類似的問題,今天有2010文件有大量的公式和幾個數據庫連接。未更新引用的圖表軸與隱藏列相似,與此鏈中的其他列相似,標籤顯示動態數據的月和年「MMM-YY」。我嘗試了除VBA選項之外的所有解決方案,因爲我更喜歡在沒有代碼的情況下解決問題。

我能夠通過將我的日期(軸標籤)封裝在TEXT公式中來解決問題,例如:= TEXT(A10,「MMM-YY」)。當值改變時,所有東西都立即更新。又快樂的日子!

從閱讀上面的其他貢獻者問題,我開始認爲圖表特別是DATE數據類型有問題,因此使用TEXT函數將值轉換爲文本可以解決我的問題。希望這可以幫助你。只需更改雙引號內的格式(TEXT函數的第二個參數)以滿足您的需求。

0

只需激活片,其中圖是:

Sheets(1).Activate 

和你的問題就消失了。

我有同樣的問題,並沒有你提到的問題爲我工作,直到我只是激活表。接受的答案也不適用於我。

或者你可以:

ActiveCell.Activate 
0

對我來說,宏沒有更新x軸的所有系列,但只有第一個。我找到的解決方案是更新所有系列的x軸,然後它重新刷新(也有代碼來改變x軸的格式,但我不認爲這是問題)。

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 
0

對我來說,第一禁用和然後重新啓用計算(例如,用於在活動工作表)解決了這個問題:

ThisWorkbook.ActiveSheet.EnableCalculation = False 
ThisWorkbook.ActiveSheet.EnableCalculation = True 

連續也許執行兩次。 工作表中的所有圖表完全更新。

0

要更新圖表,只需放一張表(「Sheet1」)。計算到您的子程序中。如果你在不同的選項卡上有更多的圖表,那麼只需創建一個工作表循環。