Построение нескольких переходов на одном точечном графике XY с разных листов

#vba

#vba

Вопрос:

У меня 10 листов. На каждом листе есть значения x и y, которые я хочу отобразить на ОДНОМ точечном графике xy. Я написал приведенный ниже код. Это работает для одного листа, но не для всех листов. Кроме того, я не знаю, как назвать каждую серию определенным именем (это могут быть ссылки на определенную ячейку на каждом листе). Пожалуйста, обратите внимание, что на каждом листе; x-значения, y-значение точно начинаются и заканчиваются в одной и той же ссылке на ячейку. То же самое верно для ссылки на ячейку имени серии.

 Sub PlotPcVsSwAllSheets()

Dim ch As Chart
Dim Sw As Range
Dim Pcres As Range
Dim ws As Worksheet
    
Set ch = ActiveSheet.Shapes.AddChart(xlXYScatter).Chart

For Each ws In Worksheets
    Set ws.Sw = ws.Range("C23", Range("C23").End(xlDown))
    Set ws.Pcres = ws.Range("AA23", Range("AA23").End(xlDown))
    With ch
        ch.SetSourceData Source:=Union(ws.Sw, ws.Pcres)
    End With
Next ws

End Sub
 

Ответ №1:

Вам нужно добавлять каждую серию по одному.

 Sub PlotPcVsSwAllSheets()

    Dim ch As Chart
    Dim Sw As Range
    Dim Pcres As Range
    Dim ws As Worksheet, wb As Workbook
    Set wb = ThisWorkbook
    
    Set ch = ActiveSheet.Shapes.AddChart(xlXYScatter).Chart
    'remove any series added by default
    Do While ch.SeriesCollection.Count > 0
        ch.SeriesCollection(1).Delete
    Loop
    
    For Each ws In wb.Worksheets
        Set Sw = ws.Range("C23", ws.Range("C23").End(xlDown))
        Set Pcres = Sw.EntireRow.Columns("AA") 'safer
        With ch.SeriesCollection.NewSeries
            .XValues = Sw
            .Values = Pcres
            .Name = ws.Range("A3").Value 'for example
        End With
    Next ws

End Sub

 

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

1. Спасибо, но это не работает. Он отображается для листа 1, но на следующем листе выдает сообщение об ошибке (метод ‘Range’ объекта ‘_Worksheet’ не удался). Ошибка возникает при выполнении строки Set Sw = ws.Range(«C23», ws.Range(«C23»).End(xlDown)). Кроме того, после выполнения AddChart line он выводит другие доступные данные на листе

2. Пара правок выше — это сработало для меня.