Excel VBA для копирования диаграммы с нескольких листов, затем объедините их в единый график на отдельном листе

#excel #vba #graph

#excel #vba #График

Вопрос:

Я пишу некоторый код VBA, который скопирует диаграмму с каждого листа в моей рабочей книге, а затем вставит объединенную диаграмму на новый лист.

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

В настоящее время мой код копирует и вставляет диаграмму с каждого листа на новый лист, но они по-прежнему являются отдельными диаграммами. Мне нужно некоторое руководство.

 Sub copyGraphs()
Dim OutSht As Worksheet
Dim Chart As ChartObject
Dim PlaceInRange As Range

Set OutputSheet = ActiveWorkbook.Sheets("PostProcess")
Set PlaceInRange = OutputSheet.Range("A1:J21")

'Loop charts
For Each Sheet In Worksheets
    Sheet.Activate
    
    If Range("A4") <> "" Then
        'Copy/paste charts
        ActiveSheet.ChartObjects("Chart 1").Activate
        ActiveChart.ChartArea.Copy
        Sheet.ChartObjects("Chart 1").Copy
        OutputSheet.Paste PlaceInRange
    End If
Next Sheet
End Sub
  

Любые предложения будут высоко оценены.

Редактировать:

В итоге мне пришлось запускать цикл для каждого графика. По-прежнему требуется вручную убедиться, что «Диаграмма 1», «Диаграмма x» находятся на главном листе с именем PostProcess в моем коде. Для меня это довольно грубая сила, но это работает.

 Sub copyGraphs()
Dim OutSht As Worksheet
Dim Chart As ChartObject
Dim PlaceInRange As Range
Dim chartInput As Chart
Dim chartOutput As Chart

Set Outputsheet = ActiveWorkbook.Sheets("PostProcess") '<~~ Output sheet


'Loop charts for efficiency
For Each Sheet In Worksheets
    Sheet.Activate
    
    If Range("A4") <> "" Then
        'Copy/paste charts
        ActiveSheet.ChartObjects("Chart 1").Activate
        ActiveChart.ChartArea.Copy
        
        Sheets("PostProcess").Select
        ActiveSheet.ChartObjects("Chart 1").Activate
        ActiveChart.Paste


    End If
Next Sheet
  

Ответ №1:

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

 Dim chartInput As Chart
Dim chartOutput As Chart
Set chartInput = Sheet1.ChartObjects("Chart 1").Chart
Set chartOutput = Sheet1.ChartObjects("Combined chart").Chart

chartInput.ChartArea.Copy
chartOutput.Paste
  

Комментарии:

1. У меня все еще была ошибка с этим кодом, к сожалению, я не потратил слишком много времени, пытаясь отладить ошибку. В итоге я написал цикл для каждого типа графика, который хотел скопировать с листа, а затем вставить на основной лист. Я должен был убедиться, что на главном листе есть «Диаграмма 1», «Диаграмма 2» и «Диаграмма 3», чтобы он работал правильно.