Диаграмма не будет обновляться в Excel (2007) - PullRequest
18 голосов
/ 04 февраля 2011

У меня есть документ Excel (2007) с диаграммой (кластеризованный столбец), которая получает свои ряды данных из ячеек, содержащих вычисленные значения

Расчетные значения никогда не изменяются напрямую, а только в результате других ячеек влист меняется

Когда я меняю другие ячейки на листе, ячейки Серии данных пересчитываются и показывают новые значения - но Диаграмма, основанная на этом Серии данных, отказывается обновляться автоматически

Я могуполучить диаграмму для обновления, сохранив / закрыв или переключив одну из настроек (например, изменив направление оси x / y и затем вернув ее обратно), или повторно выбрав ряд данных

Каждое найденное мной решениеонлайн не работает

  • Да, у меня установлен автоматический расчет
  • Ctrl + Alt + F9 все прекрасно обновляется, КРОМЕ этого графика
  • Я пересоздал графикнесколько раз и на разных компьютерах
  • Я пробовал VBA-сценарии, такие как:

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

Ничто из этого не обновляет и не обновляет диаграмму

Я замечаю, что если я наберу в своей серии данных действительные числа вместо вычислений, то обновитдиаграмма - это как если бы Excel не хотел распознавать изменения в расчетах

Кто-нибудь сталкивался с этим раньше или знает, что я мог бы сделать, чтобы решить проблему?Спасибо

Ответы [ 34 ]

12 голосов
/ 20 июля 2012

Это единственное, что я нашел, чтобы постоянно обновлять график. Это устраняет основную причину проблемы (я предполагаю): данные ряда кэшируются на диаграмме. Вынуждая диаграмму пересмотреть ряды, мы очищаем кеш.

' 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
4 голосов
/ 13 октября 2012

У меня была такая же проблема с простой круговой диаграммой.

Ни один из макросов не работал, что я пытался. На графиках cut, pasting, relocating ничего не работает.

Обходной путь, который я нашел, состоял в том, чтобы отредактировать текст диаграммы, удалить метки, затем повторно выбрать метки. Как только они снова появились, они были обновлены.

4 голосов
/ 27 августа 2011

У меня была эта проблема при генерации 1000+ графиков через VBA. Я сгенерировал графики и назначил диапазон их рядам. Однако при пересчете листа графики не будут обновляться, поскольку диапазоны данных изменили значения.

Решение -> Я выключил WrapText до цикла For ... Next, который генерирует графики, а затем снова включил его после цикла.

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

и после ...

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

Это отличное решение, поскольку оно обновляет более 1000 графиков одновременно, не просматривая их все и не изменяя что-то индивидуально.

Кроме того, я не совсем уверен, почему это работает; Я предполагаю, что когда WrapText изменяет одно свойство диапазона данных, он обновляет график, хотя у меня нет документации по этому вопросу.

4 голосов
/ 31 марта 2011

Я столкнулся с этой же проблемой - не уверен, почему, и когда это происходит, единственный способ получить диаграмму для принудительного обновления - это изменить что-то в самом определении диаграммы, что может быть легко сделано через VBA, как :

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

Возможно, есть лучший ответ, который доходит до сути проблемы - но я подумал, что это может помочь. Работая над листом, я бы быстро нажал Ctrl-X, Ctrl-V на части диаграммы (или целиком), чтобы заставить диаграмму обновиться.

3 голосов
/ 13 сентября 2011

Это абсурдная ошибка, которая сильно мешает моей работе с Excel.

Основываясь на опубликованных обходных решениях, я пришел к следующим действиям как к простейшему способу продвижения вперед ...

Нажмите на график, который вы хотите обновить - выберите CTRL-X, CTRL-V, чтобы вырезать и вставить график на место ... он будет вынужден обновить.

2 голосов
/ 23 мая 2012

Это очень хорошо работает для меня - оно переворачивает оси на всех графиках, а затем переворачивает их назад, что приводит к их обновлению без каких-либо изменений.

'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
2 голосов
/ 24 мая 2013

У меня другая проблема с обновлением графиков.При автоматическом создании диаграмм некоторые диаграммы отображаются поверх и кэшируют текст на листе.Это проблема обновления сгенерированных графиков.Когда я увеличиваю или уменьшаю масштаб, я могу получить ожидаемые результаты.Поэтому я выкладываю решение здесь, если оно кого-то интересует.Программно я добавил это после генерации диаграмм:

ActiveWindow.Zoom = ActiveWindow.Zoom + 1
ActiveWindow.Zoom = ActiveWindow.Zoom - 1
2 голосов
/ 06 февраля 2014

Я столкнулся с той же проблемой. Проблема связана с ограничением в нет. расчетных формул на вашем листе. Вы можете решить это двумя способами:

Ручной пересчет силы:

Press SHEFT + F9

Макрос для принудительного пересчета: добавьте приведенный ниже код в конец функции, которая изменяет данные

Activesheet.Calculate

Я нашел решение этого вопроса: Из параметров Excel убедитесь, что изменили параметры расчета, как показано ниже. После тяжелой работы в Excel он иногда изменялся на ручной.

Auto Calculation

2 голосов
/ 19 сентября 2012

Это известная ошибка в Excel ...

Лучший и самый быстрый обходной путь - Columns.AutoFit - Уловка:

Sub Update_Charts()
    Application.ScreenUpdating = False
    Temp = ActiveCell.ColumnWidth
    ActiveCell.Columns.AutoFit
    ActiveCell.ColumnWidth = Temp
    Application.ScreenUpdating = True
End Sub
1 голос
/ 25 августа 2011

Эта проблема смешная! Ни одно решение не сработало для меня в 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")

Просто переопределил диапазон исходных данных. Если это именованный диапазон, он может быть достаточно чистым. Я полагаю, что лучшее решение этой проблемы - продолжать пытаться изменять различные свойства диаграммы, пока она не обновится.

...