#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. Пара правок выше — это сработало для меня.