Блокировка данных в диаграмме Excel - PullRequest
1 голос
/ 28 января 2012

В коде VBA я создаю диаграмму из листа с отфильтрованными данными.

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

Как мне заблокировать данные диаграммы первого графика, чтобы предотвратить их перезапись при создании второго графика?

VBA code
1. Filter data for graph 1
2. Create graph 1
3. Filter data for graph 2
4. Create graph 2
Graph 1 and graph 2 now both have graph 2's data.

Теперь я попытался сделать

5. Cut the chart and using "PasteSpecial" as an image.
   Sheets("Sheet2").PasteSpecial Format:="Picture (Enhanced Metafile)", Link:=False, DisplayAsIcon:=False

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

Namaste

Ответы [ 3 ]

3 голосов
/ 29 января 2012

ulvund: вместо того, чтобы вручную копировать и вставлять его как изображение, вы рассматривали возможность экспорта диаграммы в виде изображения и повторного импорта ее в Excel?Ниже работает для меня:)

Пример

Option Explicit

Sub Sample()
    Dim FileNM As String

    FileNM = "C:\Sample.jpg"

    '~~> Export the chart as a jpg
    Sheets("Sheet1").ChartObjects(1).Chart.Export Filename:=FileNM, FilterName:="jpg"

    DoEvents

    '~~> Import the saved image in Sheet 2
    Sheets("Sheet2").Pictures.Insert FileNM
End Sub
1 голос
/ 29 января 2012

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

Например, сначала скопируйте данные в созданную вами скрытую электронную таблицу с именем «ChartData», а затем измените код создания диаграммы, чтобы он смотрел на этот лист, а не там, где он выглядит сейчас. Затем вы можете сохранить счетчик на некотором листе конфигурации или использовать коллекцию фигур электронных таблиц (поиск ActiveSheet.Shapes для объектов типа Chart), чтобы определить, сколько диаграмм уже создано, и настроить последующие диаграммы для ссылки на свои собственные. отдельные столбцы на «ChartData», чтобы не было перекрытия.

Однако, если вы используете коллекцию фигур, не забудьте очистить лист ChartData, чтобы синхронизировать ваши данные и коллекцию диаграмм.

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

0 голосов
/ 12 июня 2012

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

With ActiveChart.SeriesCollection(1)
    ' must repeat for all series in the chart
    .Name = .Name
    .Values = .Values
    .XValues = .XValues
End With

Для получения более подробной информации (особенно о том, как заставить его принимать больше очков, прежде чем он сломается), ознакомьтесь с Delink Chart Data на моем веб-сайте

...