Диаграмма не будет обновляться в 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 ]

0 голосов
/ 21 февраля 2013

Для меня работало использование макроса для вставки / удаления столбца в таблице данных для диаграммы.Это приведет к тому, что диаграмма обновит выбор данных.

Я нашел, что это самый быстрый способ исправить это.

0 голосов
/ 02 мая 2017

Для меня сначала отключение, а затем повторное включение расчета (например, для активной рабочей таблицы) решило проблему:

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

Возможно, выполнить дважды подряд.Все диаграммы в таблице обновляются полностью.

0 голосов
/ 25 августа 2016

Просто активируйте лист, где находится диаграмма:

Sheets(1).Activate

и ваша проблема исчезает.

У меня была та же проблема, и ни одна из вещей, о которых вы говорили, не работала для меня, пока я не активировал лист. Принятый ответ не сработал и для меня.

В качестве альтернативы вы можете сделать:

ActiveCell.Activate
0 голосов
/ 07 июня 2011

Просто провел полдня на этом сам.

У меня есть макрос, который изменяет значения, которые являются данными для диаграммы. В 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

DO MACRO STUFF, ИЗМЕНЯЮЩИЕ ДАННЫЕ

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
0 голосов
/ 20 ноября 2013

Это может выглядеть очень просто, но я только что попробовал ручной расчет в электронной таблице, где были диаграммы (нажав F9), и это сработало! Код VBA для этого просто:

Вычислить

;)

0 голосов
/ 19 ноября 2013

Я тоже боролся с этой проблемой. Окончательно решил эту проблему, пересчитав лист с данными диаграммы ПОСЛЕ того, как пользовательская функция пересчитала. Итак, на листе 1 у меня есть ячейка, которая содержит

=ComputeScore()

В модуле VBA функция определена как Volatile, чтобы гарантировать, что ComputeScore () запускается после любых обновлений в электронной таблице.

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

Затем в VBA Листа 1 это:

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 () обновила ячейку Листа 1, так как Worksheet_Calculate () срабатывает после повторного вычисления ComputeScore (). , Этот дополнительный раунд расчета данных диаграммы приводит к обновлению диаграммы сейчас, а не позже или вообще не обновляется. Настройка EnableEvents и xlManual предотвращает возникновение бесконечных циклов повторного вызова и других проблем с событиями.

0 голосов
/ 18 июня 2013

У меня была такая же проблема при работе с учебником (очень расстраивает, когда вы выполняете шаги и не получаете ожидаемого результата).

В руководстве по созданию круговой диаграммы я хотел выбрать диапазон 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 голосов
/ 23 января 2012

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

Лучшее объяснение, которое я смог найти до сих пор, таково: http://support.microsoft.com/kb/243495

Если я правильно понял, если существует более 65536 формул, в которых в качестве ссылки используется другая ячейкаВаш файл Excel начинает оптимизировать вычисления, и в некоторых случаях графики больше не обновляются корректно.

Если для этого есть обходной путь без использования макросов VBA, я был бы рад это услышать (не могуиспользуйте их, так как файлы должны быть доступны через SharePoint без макросов VBA.

0 голосов
/ 30 июля 2016

У меня сегодня была похожая проблема с файлом 2010 года с большим количеством формул и несколькими подключениями к базе данных. Ось диаграммы, которая не обновляла диапазоны ссылок со скрытыми столбцами, аналогичными другим в этой цепочке, а метки отображали месяц и год «МММ-ГГ» динамических данных. Я перепробовал все перечисленные решения, кроме вариантов VBA, так как предпочел бы решать без кода.

Мне удалось решить проблемы, заключив мои даты (метки осей) в формулу ТЕКСТА следующим образом: = ТЕКСТ (A10, "МММ-ГГ"). И все сразу обновляется, когда значения меняются. Счастливые дни снова !!!

Из прочтения вышеупомянутых проблем других авторов я начал думать, что в диаграммах были проблемы именно с типом данных DATE, и поэтому преобразование значений в текст с помощью функции TEXT решило мою проблему. Надеюсь, это может помочь вам. Просто измените формат в двойных кавычках (второй аргумент функции TEXT) в соответствии с вашими потребностями.

0 голосов
/ 15 июля 2014

Поскольку я попробовал почти ВСЕ представленные решения, и поскольку ни одно из них не сработало в моем случае, я добавлю здесь и свои два цента.Надеемся, что это поможет кому-то еще.

Похоже, что консенсус по этому вопросу заключается в том, что нам нужно каким-то образом заставить 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
...