График Excel не будет обновляться

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

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

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

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

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

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

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

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

Я замечаю, что если я наберу над своей Data Series фактические числа вместо вычислений, он обновит график – это как если бы 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 на куске диаграммы (или всего этого), чтобы заставить график обновиться.

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

 ' 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 

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

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

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

и после…

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

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

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

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

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

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

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

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

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

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

 '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 – Trick:

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

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

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

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

Ручное изменение силы:

 Press SHEFT + F9 

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

 Activesheet.Calculate 

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

Автоматический расчет

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

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

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

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

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

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

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

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

Это сработало для меня, оно сокращает и повторно вставляет диаграммы на активный рабочий лист. Я основывал это на коде Джейсона и блоге, который я нашел в быстром поиске 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 

Начиная с 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 

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

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

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

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

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

Решение:

 With ActiveWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule .AddFromString "'test" .DeleteLines 1 End With 

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

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

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

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

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

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

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

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

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

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

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

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

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

подсчитывать

😉

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 Sheets(1).Activate 

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

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

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

 ActiveCell.Activate 
  • Переменная объекта или с не заданной переменной блока (Ошибка 91)
  • Вызов VBA - API отображается в Excel
  • Значение Autonumber последней вставленной строки - MS Access / VBA
  • Доступ к базе данных SQL в Excel-VBA
  • Excel VBA для соответствия строк и строк
  • расплавить / переделать в excel с помощью VBA?
  • VBA, удалите дубликаты из массива
  • Разбор даты и времени ISO8601 (включая TimeZone) в Excel
  • Функция Excel VBA работает в Visual Basic, но не работает в рабочем листе
  • VBA Shell и подождите с кодом выхода
  • Создание документов Word (в Excel VBA) из серии шаблонов документов
  • Давайте будем гением компьютера.