Вот мой взгляд на это. Найдите что-то общее на всех листах, l oop на каждом листе, выполните общую / стандартизированную операцию на каждом листе.
Sub Macro1()
Dim rs As Worksheet
For Each rs In ThisWorkbook.Worksheets
rs.Select
If rs.Name <> "Unemployment" Then
Columns("B:D").Select
Range("B5").Activate
ActiveSheet.Shapes.AddChart2(227, xlLine).Select
ActiveChart.SetSourceData Source:=Range(rs.Name & "!$B:$D")
ActiveChart.ChartType = xlColumnClustered
ActiveChart.FullSeriesCollection(1).ChartType = xlColumnClustered
ActiveChart.FullSeriesCollection(1).AxisGroup = 1
ActiveChart.FullSeriesCollection(2).ChartType = xlLine
ActiveChart.FullSeriesCollection(2).AxisGroup = 1
ActiveChart.FullSeriesCollection(1).AxisGroup = 2
ActiveChart.FullSeriesCollection(1).ChartType = xlLine
End If
Next rs
End Sub
Обратите внимание, я пропускаю первый лист с названием «Безработица», потому что этот лист отличается от всех остальных. Кроме того, код между If ... End If - это просто записанный макрос. Если он не делает именно то, что вы хотите, запишите макрос, чтобы сделать то, что вы хотите, и скопируйте / вставьте этот код между If ... End If.
Дайте мне знать, если у вас есть какие-либо вопросы.
Основываясь на вашем последнем вопросе, вот мои выводы.
# 1) В книге под названием «GDP_Annual_Growth_Rate» у вас фактически есть место после вкладки «GDP Annual%», поэтому Фактическое название - «Годовой ВВП в%». Я не думаю, что вы этого хотите!
# 2) Вы должны были закрыть свой Sub с помощью 'End Sub'. Вам ВСЕГДА нужен «End Sub» в конце.
# 3) Когда вы начинаете l oop листать, вы начинаете выбирать диаграммы и вносить изменения в эти диаграммы, например: 'ActiveSheet .ChartObjects ("Диаграмма 1"). Активировать '. Но что, если у вас нет диаграммы на одном листе, вы не можете выбрать диаграмму, если она не существует.
# 4) Наконец, rs звучит как записи, установленные в MS Access; это мой взгляд на это. Почему бы не объявить рабочий лист как ws: 'Dim ws As Worksheet'
Вот рабочий код, с которого можно начать.
Sub DeleteallCharts()
Dim chtObj As ChartObject
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
ws.Select
For Each chtObj In ActiveSheet.ChartObjects
chtObj.Delete
Next
Next ws
End Sub
Sub BuildAllCharts()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
ws.Select
If ws.Name <> "GDP Annual %" And ws.Name <> "Navigation" Then
Range("A:A,E:E").Select
Range("" & ws.Name & "[[#Headers],[12 Mth Rolling Avg.]]").Activate
ActiveSheet.Shapes.AddChart2(227, xlColumnClustered).Select
ActiveChart.SetSourceData Source:=Range("" & ws.Name & "!$A:$A," & ws.Name & "!$E:$E")
ActiveChart.FullSeriesCollection(1).Select
With Selection.Format.Fill
.Visible = msoTrue
.ForeColor.RGB = RGB(255, 0, 0)
.Transparency = 0
.Solid
End With
Range("" & ws.Name & "[[#Headers],[Country]]").Select
End If
Next ws
End Sub
Примечание: первый макрос удаляет все диаграммы, а второй макрос строит все графики. Единственное, что может немного сбивать с толку, - это '& ws.Name &', но оно вам нужно, когда вы l oop просматриваете все листы, поэтому вы получаете динамические c ссылки на каждый относительный набор данных на каждом листе. Запишите макрос самостоятельно, и вы увидите, что он привязан к одному конкретному листу c.
Наконец ... если вы хотите создать вторичную ось, выполните следующие действия.
Select a chart to open Chart Tools.
Select Design > Change Chart Type.
Select Combo > Cluster Column - Line on Secondary Axis.
Select Secondary Axis for the data series you want to show.
Select the drop-down arrow and choose Line.
Select OK.
Я только что создал для вас образец ниже. Ваши конкретные требования могут немного отличаться, но это должно проиллюстрировать суть.
Here is a link for some really, really, really cool charting ideas.
https://peltiertech.com/Excel/Charts/ChartIndex.html