以下の半作業コードは、「sheet1」からチャートにデータをプロットし、それを独自のシートに移動してそこに埋め込みます。すべてのデータは「sheet1」にあります。各チャートには独自の新しいページが必要です。すべての反復で同じ X 軸の値が使用されますが、Y 軸の値は個別に使用されます (以下で確認できます)。
私の問題は2回目の反復にあります(同じシートから異なる列をプロットしようとしています)。以下の私のコードは、各チャートが異なることを区別せず、最後の反復を 2 回プロットします。これを全体的にコーディングするためのよりクリーンな方法がおそらくあることを認識していますが、私はVBAに非常に慣れていないため、この方法に従うことができます。
私の腸は、反復ごとに Active.Chart をそれぞれ Graph1 と Graph2 に変更するように指示しましたが、これを試しても何も変わりませんでした。構文を変更して、反復ごとに新しいタイトルなどで新しいページで新しいチャートを開始するように VBA に指示するにはどうすればよいですか?
誰かがこれについて正しい方向に私を向けることができれば、私は非常に感謝しています! 私はそれが簡単であることを知っていますが、私はそれを理解するのに頭が痛いです.
'Plot Forces, Horizontal
Sub PlotResults()
On Error Resume Next
Range("A1").Select 'Prevent ghost plots
ActiveSheet.Shapes.AddChart.Select
ActiveChart.ChartType = xlXYScatterSmooth
ActiveChart.Parent.Name = ("Graph1")
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(1).Name = "Primary"
ActiveChart.SeriesCollection(1).XValues = "='Sheet1'!$A$10:$A$369"
ActiveChart.SeriesCollection(1).Values = "='Sheet1'!$B$20:$B$369"
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(2).Name = "Secondary"
ActiveChart.SeriesCollection(2).XValues = "='Sheet1'!$A$10:$A$369"
ActiveChart.SeriesCollection(2).Values = "='Sheet1'!$C$20:$C$369"
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(3).Name = "Total"
ActiveChart.SeriesCollection(3).XValues = "='Sheet1'!$A$10:$A$369"
ActiveChart.SeriesCollection(3).Values = "='Sheet1'!$D$20:$D$369"
'Titles
ActiveChart.HasTitle = True
ActiveChart.ChartTitle.Characters.Text = ("Unbalance Forces, X" & vbCrLf & Model) 'NEED TO FIX THIS
ActiveChart.Axes(xlCategory, xlPrimary).HasTitle = True
ActiveChart.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Crank Angle, Degrees"
ActiveChart.Axes(xlValue, xlPrimary).HasTitle = True
ActiveChart.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Force (LBS)"
ActiveChart.Axes(xlCategory).HasMajorGridlines = True
'Formatting
ActiveChart.Axes(xlCategory).HasMinorGridlines = False
ActiveChart.Axes(xlValue).HasMajorGridlines = True
ActiveChart.Axes(xlValue).HasMinorGridlines = False
ActiveChart.HasLegend = True
With ActiveChart.Axes(xlCategory, xlPrimary)
.MaximumScale = 360
.MinimumScale = 0
.MajorUnit = 30
End With
With ActiveChart.Parent 'resize/reposition
.Height = 525
.Width = 900
.Top = 50
.Left = 100
End With
'Embed chart in own window
ActiveSheet.ChartObjects("Graph2").Activate
ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="Force, X"
'Plot Moments, Horizontal
Range("A1").Select 'Prevent ghost plots
ActiveSheet.Shapes.AddChart.Select
ActiveChart.ChartType = xlXYScatterSmooth
ActiveChart.Parent.Name = ("Graph2")
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(1).Name = "Primary"
ActiveChart.SeriesCollection(1).XValues = "='Sheet1'!$A$10:$A$369"
ActiveChart.SeriesCollection(1).Values = "='Sheet1'!$G$20:$G$369"
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(2).Name = "Secondary"
ActiveChart.SeriesCollection(2).XValues = "='Sheet1'!$A$10:$A$369"
ActiveChart.SeriesCollection(2).Values = "='Sheet1'!$H$20:$H$369"
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(3).Name = "Total"
ActiveChart.SeriesCollection(3).XValues = "='Sheet1'!$A$10:$A$369"
ActiveChart.SeriesCollection(3).Values = "='Sheet1'!$I$20:$I$369"
'Titles
ActiveChart.HasTitle = True
ActiveChart.ChartTitle.Characters.Text = ("Unbalance Moments, X" & vbCrLf & Model) 'NEED TO FIX THIS
ActiveChart.Axes(xlCategory, xlPrimary).HasTitle = True
ActiveChart.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Crank Angle, Degrees"
ActiveChart.Axes(xlValue, xlPrimary).HasTitle = True
ActiveChart.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Moment (FT-LBS)"
ActiveChart.Axes(xlCategory).HasMajorGridlines = True
'Formatting
ActiveChart.Axes(xlCategory).HasMinorGridlines = False
ActiveChart.Axes(xlValue).HasMajorGridlines = True
ActiveChart.Axes(xlValue).HasMinorGridlines = False
ActiveChart.HasLegend = True
With ActiveChart.Axes(xlCategory, xlPrimary)
.MaximumScale = 360
.MinimumScale = 0
.MajorUnit = 30
End With
With ActiveChart.Parent 'resize/reposition
.Height = 525
.Width = 900
.Top = 50
.Left = 100
End With
'Embed chart in own window
ActiveSheet.ChartObjects("Graph2").Activate
ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="Moment, X"
End Sub