Подтвердить что ты не робот

Диаграмма не будет обновляться в Excel (2007)

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

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

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

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

Каждое решение, которое я нашел в Интернете, не работает

  • Да, у меня есть расчет, автоматический
  • Ctrl + Alt + F9 обновляет все отлично, ЗА ИСКЛЮЧЕНИЕМ диаграммы
  • Я несколько раз воссоздал диаграмму и на разных компьютерах
  • Я пробовал скрипты VBA, например:

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

Ни одно из этих обновлений или обновления диаграммы

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

' 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

Ответ 3

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

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

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

и после...

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

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

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

Ответ 4

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

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

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

Ответ 5

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

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

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

Ответ 6

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

'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

Ответ 7

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

Лучшее и быстрое обходное решение - Columns.AutoFit - Trick:

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

Ответ 8

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

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

Ответ 9

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

Повторное вычисление вручную:

Press SHEFT + F9

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

Activesheet.Calculate

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

Auto Calculation

Ответ 10

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

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

Ответ 11

Хорошо, у меня есть решение, действительно....

Я обнаружил, что проблема с моими диаграммами, не обновлявшимися сначала, произошла вскоре после того, как я спрятал некоторые столбцы данных, подающие диаграмму, и проверил "показать данные, скрытые в строках и столбцах" в диалоговом окне "Выбор источника данных" msg box).

Я обнаружил, что если я вернусь в поле "Выбор источника данных" и не снял/перепроверял "показать данные, скрытые в строках и столбцах", которые обновляется диаграммой.

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

Ответ 12

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

Ответ 13

Мы нашли решение, которое не связано с VBA: умножение некоторого элемента диапазона данных диаграммы на TODAY()-TODAY()+1.

Несмотря на то, что диапазон был пересчитан без этого, изменчивый характер TODAY() каким-то образом дает ему дополнительный импульс, который вызывает пересчет диаграммы.

Ответ 14

Это сработало для меня, оно сокращает и повторно вставляет диаграммы на активный рабочий лист. Я основывал это на коде Джейсона и сообщение в блоге Я нашел в быстром поиске Google.

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

Ответ 16

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

У меня есть макрос, который изменяет значения, которые являются данными для диаграммы. Все работает отлично в Excel 2003, но в Excel 2007 диаграмма, похоже, теряет все соединение с ее данными, хотя вручную изменение значений данных в двух столбцах вызвало recalc.

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

Это работает для меня, а также обрабатывает аналогичные проблемы с диаграммами, а также с объектами диаграммы. Обновление может не понадобиться - требуется больше тестирования.

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

Ответ 17

У меня была такая же проблема, как и плакат. В основном я запускаю панель управления, и у меня есть куча именованных диапазонов, которые заполняются возвращаемыми значениями из некоторых UDF. На приборной панели есть несколько круговых диаграмм с рядом данных, привязанных к ячейкам, которые содержат эти именованные диапазоны (проблема также возникает, если целевые ячейки серии данных содержат UDF напрямую, минуя именованные диапазоны).

Я изменяю значение ячейки, которое содержит, например, диапазон дат, на котором базируется панель мониторинга, и именованные диапазоны и UDF вынуждены вычислять. Тем не менее, круговые диаграммы не обновляются - по некоторым причинам, делают другие типы диаграмм. И, кстати, это объекты диаграммы, а не таблицы диаграмм. В любом случае, разрежьте решение:

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

Решение:

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

     .AddFromString "'test"
     .DeleteLines 1

End With

Если вы используете модуль Workbook (я не был в этом случае), просто создайте вместо него новый модуль и ссылку.

Ответ 18

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

Лучшее объяснение, которое мне удалось найти, следующее: http://support.microsoft.com/kb/243495

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

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

Ответ 19

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

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

Ответ 20

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

В учебнике по созданию круговой диаграммы мне нужно было выбрать диапазон 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)

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

Ответ 21

Я тоже боролся с этой проблемой. Наконец, это удалось решить, пересчитав лист, который имеет данные диаграммы ПОСЛЕ пересчета пользовательской функции. Итак, в Листе 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 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

Итак, лист с именем Charts Data, который ссылается на пользовательскую функциональную ячейку Sheet 1, выполнит пересчет ПОСЛЕ ВЫПОЛНЕНИЯ функции ComputeScore(), которая обновила ячейку Листа 1, поскольку Worksheet_Calculate() запускается после ComputeScore() recalc, Этот дополнительный раунд вычисления данных диаграммы заставляет диаграмму обновляться сейчас, а не позже или совсем не. Параметр EnableEvents и xlManual поддерживает бесконечные циклы recalc и другие события.

Ответ 22

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

Вычислить

;)

Ответ 23

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

Консенсус по этому вопросу, похоже, заключается в том, что нам нужно как-то заставить excel перерисовать граф, поскольку он не делает этого, когда это нужно.

Мое решение состояло в том, чтобы убить данные X-Axis и заменить его ничем, прежде чем менять его на то, что я хотел. Здесь мой код:

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

Ответ 24

Мои два цента для этой проблемы - у меня была аналогичная проблема с диаграммой в отчете Access 2010. Я динамически создавал querydef, устанавливая это как rowource в моем отчете, а затем пытаюсь пропустить каждую серию и задавать свойства каждой серии. То, что мне в итоге пришлось сделать, это разбить создание запроса и настройку свойств на отдельные субтитры. Кроме того, я положил

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

внизу каждого из двух подмножеств.

Ответ 25

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

Ответ 26

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

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

Ответ 27

У меня была одна и та же проблема, а также выяснилось, что строка будет отображаться только в том случае, если я поставлю плохие данные (символы вместо цифр). Это вызвало появление строки, но переход к действительным данным заставил ее снова исчезнуть.

Я обнаружил, что если бы я дважды щелкнул строку (появлялся с плохими данными), она показала мне, что она была на оси SECONDARY по какой-то причине. Изменение этой оси PRIMARY решило мою проблему.

Ответ 28

Диаграммы не "чувствуют" изменения с прямой вставкой значений в исходные ячейки с помощью макроса. Вы должны отправить значения из ячеек диаграммы, и после этого используйте такой код

. Worksheets ( "Лист1") Range ( "A1: K1") = Worksheets ( "Лист2") Диапазон.. ( "A4: K4") Значение

Ответ 29

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

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

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

Ответ 30

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

Sheets(1).Activate

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

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

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

ActiveCell.Activate