Excel 2010 VBA удаляет диаграмму

Я поддерживаю приложение Excel VBA в свободное время. Я занимаюсь производственным процессом, а не профессиональным разработчиком.

Графические части приложения работали без проблем в Excel 2007. Моя компания обновляется до Excel 2010, и у того же приложения теперь возникают проблемы с взаимодействием с диаграммами на листах.

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

        'select the histogram chart
        Sheets(sChartSheet).Select
        ActiveSheet.ChartObjects("Chart 15").Activate

        Call PBarCaption("Delete Existing Histogram Series")
        'remove any existing series
        For i = 1 To ActiveChart.SeriesCollection.Count
            ActiveChart.SeriesCollection(1).Delete
        Next i

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

    'add series for histogram
    ActiveChart.SeriesCollection.NewSeries
    ActiveChart.SeriesCollection(1).Values = "=HistogramData!$B$5:$B$29"
    ActiveChart.SeriesCollection(1).XValues = "=HistogramData!$A$5:$A$29"
    ActiveChart.SeriesCollection(1).charttype = xlColumnClustered

Проблема с 2010 года заключается в том, что иногда, когда код VBA запущен, вся диаграмма-диаграмма «потеряна» (удалена), а не присутствует в таблице без определенной серии.

Кажется, что «потерянная» диаграмма происходит, когда последовательные исполнения базового кода выполняются через другой раздел кода VBA, который автоматически создает серию диаграмм и копирует их в PowerPoint.

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

Я надеюсь, что кто-то знаком с изменениями в графике с версии Excel 2007 до 2010 года и сможет помочь.

Благодаря,

Len

3
Можете ли вы подтвердить, что диаграммы действительно удаляются, или возможно, что диаграмма просто становится невидимой? Уменьшается ли длина коллекции ChartObjects для текущего листа? Когда мы обновили существующие книги с кодом манипуляции диаграммой с Excel 2003 до Excel 2007, мы обнаружили, что наш код будет приводить к тому, что диаграммы исчезнут из представления, но они все еще присутствуют в фоновом режиме. Если они все еще существуют, это может показаться странным, но если вы перейдете на панель управления и остановитесь, а затем запустите службу под названием «Диспетчер очереди печати», они могут снова появиться.
добавлено автор Michael Kingsmill, источник
Мы нашли, что лучшим решением этой проблемы было написать код, который удалил и воссоздал все диаграммы с нуля в виде свежих диаграмм 2010 года, чтобы удалить скрытое «коррупцию» из версии Excel 2003.
добавлено автор Michael Kingsmill, источник
Майкл, спасибо. Надеюсь, на следующей неделе у меня будет время, чтобы вернуться к этому. Когда объект диаграммы отображается во время макросъемки в 2010 году, я могу сделать это и удалить весь график и каждый раз воссоздавать с нуля, чтобы иметь полный контроль. Я начал делать это при переносе на версию 2007 года, но объект графического объекта изменился, а объектная модель не была показана в макрозаписке, это было слишком много, чтобы откусить. Я опубликую обновление, когда я получу кое-что с этим.
добавлено автор NitroLen, источник

2 ответы

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

Dim cht As Chart

Set cht = ActiveWorkbook.Sheets(sChartSheet).ChartObjects("Chart 15").Chart
Do While cht.SeriesCollection.Count > 0
    cht.SeriesCollection(1).Delete
Loop

With cht.SeriesCollection
    .NewSeries
    With .Item(1)
        .Values = "=HistogramData!$B$5:$B$29"
        .XValues = "=HistogramData!$A$5:$A$29"
        .ChartType = xlColumnClustered
    End With
End With
2
добавлено
Это, безусловно, лучший дизайн, выбор диаграмм на скрытых листах, например, приведет к исключению среды выполнения, поэтому лучше никогда не выбирать объекты листа. Кроме того, без отключения обновления экрана это поможет вам слишком сильно мерцать экран. Тем не менее, это не будет делать много, чтобы решить вашу проблему.
добавлено автор Michael Kingsmill, источник
Хорошая передовая практика. Я это сделаю. Я пытаюсь свести к минимуму непосредственную работу с выбранными объектами, но он работал, обновление экрана было отключено, поэтому было перенесено на другие задачи!
добавлено автор NitroLen, источник

Я перестроил все взаимодействия с диаграммой, чтобы использовать «с», а не выбирать. Его лучшее программирование.

К сожалению, это не решило проблему.

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

Справка

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

Проблема возникла при использовании кода VBA для копирования элементов листа в PowerPoint. Выполнял копирование как принтер, битмат, используя:

rSlideArea.CopyPicture (2)  

Изменено для копирования в виде растрового изображения экрана, используя:

rSlideArea.CopyPicture Appearance:=xlScreen, Format:=xlBitmap

Интересно, что полученные файлы PowerPoint с форматированием растровых изображений были проще работать и были меньше.

В результате изображения в PowerPoint не являются «красивыми» с форматированием экрана, но приложение теперь работает в Excel v2010, что было непосредственным приоритетом.

Спасибо всем, кто помог.

0
добавлено