VBA 使用多个数据系列创建 xy 散点图
VBA create xy scatter plot using multiple data series
我正在尝试使用 VBA 在其自己的工作表上创建一个 xy 散点图。我有两组数据要使用。当我第一次 运行 下面显示的代码时(即当不存在“功率图”时),它会正确绘制数据。但是,当我重新 运行 代码时出现“功率图表”时,我得到了 3 个额外的系列,两个带有空白数据,一个只有 y 值,对应于我的工作表中的最后一列。然后,当我第三次 运行 代码时,我再次得到正确的情节。继续重新 运行 我的代码重复好情节 -> 坏情节 -> 好情节的循环。关于造成这种情况的原因有什么想法吗?
Sub CreatingChartOnChartSheet()
Dim ch As Chart
Dim xrng As Range
Dim yrng1 As Range
Dim yrng2 As Range
Set ch = Charts.Add
Set xrng = Sheets("Power").Range("A2:A65536")
Set yrng1 = Sheets("Power").Range("D2:D65536")
Set yrng2 = Sheets("Power").Range("E2:E65536")
With ch
' If there is a previous chart, delete it
For Each Chart In ActiveWorkbook.Charts
If Chart.Name = "Power Chart" Then
Application.DisplayAlerts = False
Charts("Power Chart").Delete
Application.DisplayAlerts = True
End If
Next Chart
.SeriesCollection.NewSeries
.SeriesCollection(1).Name = "=""Series 1"""
.SeriesCollection(1).XValues = xrng
.SeriesCollection(1).Values = yrng1
.SeriesCollection.NewSeries
.SeriesCollection(2).Name = "=""Series 2"""
.SeriesCollection(2).XValues = xrng
.SeriesCollection(2).Values = yrng2
.SetElement (msoElementChartTitleAboveChart)
.Name = "Power Chart"
.ChartTitle.Text = "Power"
.SetElement (msoElementLegendRight)
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Text = "Time (h)"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Text = "Power (kW)"
'.Axes(xlCategory).MajorUnit = 1
'.Axes(xlCategory).MinorUnit = 1
End With
End Sub
如果在作品sheet 上选择了数据时插入图表sheet 或图表对象,图表将auto-plot 选择的数据。每当通过 VBA 添加图表时,最好先删除任何获得 auto-added.
的系列
Sub CreatingChartOnChartSheet()
Dim xrng As Range
Dim yrng1 As Range
Dim yrng2 As Range
With Sheets("Power")
Set xrng = .Range("A2:A65536")
Set yrng1 = .Range("D2:D65536")
Set yrng2 = .Range("E2:E65536")
End With
Application.DisplayAlerts = False
On Error Resume Next
Charts("Power Chart").Delete
On Error GoTo 0
Application.DisplayAlerts = True
With Charts.Add
'remove any auto-plotted data
Do While .SeriesCollection.Count > 0
.SeriesCollection(1).Delete
Loop
With .SeriesCollection.NewSeries
.Name = "Series 1"
.XValues = xrng
.Values = yrng1
End With
With .SeriesCollection.NewSeries
.Name = "=""Series 2"""
.XValues = xrng
.Values = yrng2
End With
.SetElement msoElementChartTitleAboveChart
.Name = "Power Chart"
.ChartTitle.Text = "Power"
.SetElement (msoElementLegendRight)
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Text = "Time (h)"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Text = "Power (kW)"
'.Axes(xlCategory).MajorUnit = 1
'.Axes(xlCategory).MinorUnit = 1
End With
End Sub
我正在尝试使用 VBA 在其自己的工作表上创建一个 xy 散点图。我有两组数据要使用。当我第一次 运行 下面显示的代码时(即当不存在“功率图”时),它会正确绘制数据。但是,当我重新 运行 代码时出现“功率图表”时,我得到了 3 个额外的系列,两个带有空白数据,一个只有 y 值,对应于我的工作表中的最后一列。然后,当我第三次 运行 代码时,我再次得到正确的情节。继续重新 运行 我的代码重复好情节 -> 坏情节 -> 好情节的循环。关于造成这种情况的原因有什么想法吗?
Sub CreatingChartOnChartSheet()
Dim ch As Chart
Dim xrng As Range
Dim yrng1 As Range
Dim yrng2 As Range
Set ch = Charts.Add
Set xrng = Sheets("Power").Range("A2:A65536")
Set yrng1 = Sheets("Power").Range("D2:D65536")
Set yrng2 = Sheets("Power").Range("E2:E65536")
With ch
' If there is a previous chart, delete it
For Each Chart In ActiveWorkbook.Charts
If Chart.Name = "Power Chart" Then
Application.DisplayAlerts = False
Charts("Power Chart").Delete
Application.DisplayAlerts = True
End If
Next Chart
.SeriesCollection.NewSeries
.SeriesCollection(1).Name = "=""Series 1"""
.SeriesCollection(1).XValues = xrng
.SeriesCollection(1).Values = yrng1
.SeriesCollection.NewSeries
.SeriesCollection(2).Name = "=""Series 2"""
.SeriesCollection(2).XValues = xrng
.SeriesCollection(2).Values = yrng2
.SetElement (msoElementChartTitleAboveChart)
.Name = "Power Chart"
.ChartTitle.Text = "Power"
.SetElement (msoElementLegendRight)
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Text = "Time (h)"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Text = "Power (kW)"
'.Axes(xlCategory).MajorUnit = 1
'.Axes(xlCategory).MinorUnit = 1
End With
End Sub
如果在作品sheet 上选择了数据时插入图表sheet 或图表对象,图表将auto-plot 选择的数据。每当通过 VBA 添加图表时,最好先删除任何获得 auto-added.
的系列Sub CreatingChartOnChartSheet()
Dim xrng As Range
Dim yrng1 As Range
Dim yrng2 As Range
With Sheets("Power")
Set xrng = .Range("A2:A65536")
Set yrng1 = .Range("D2:D65536")
Set yrng2 = .Range("E2:E65536")
End With
Application.DisplayAlerts = False
On Error Resume Next
Charts("Power Chart").Delete
On Error GoTo 0
Application.DisplayAlerts = True
With Charts.Add
'remove any auto-plotted data
Do While .SeriesCollection.Count > 0
.SeriesCollection(1).Delete
Loop
With .SeriesCollection.NewSeries
.Name = "Series 1"
.XValues = xrng
.Values = yrng1
End With
With .SeriesCollection.NewSeries
.Name = "=""Series 2"""
.XValues = xrng
.Values = yrng2
End With
.SetElement msoElementChartTitleAboveChart
.Name = "Power Chart"
.ChartTitle.Text = "Power"
.SetElement (msoElementLegendRight)
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Text = "Time (h)"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Text = "Power (kW)"
'.Axes(xlCategory).MajorUnit = 1
'.Axes(xlCategory).MinorUnit = 1
End With
End Sub