图例条目、范围、饼图、删除、条件
LegendEntries, Range, PieChart, Delete, Condition
这几天我一直在努力寻找错误或我做错了什么。我在这里显示当前输出及其应该是什么。我想也许我在定义范围时犯了一些错误,或者 LegendEntries(i)
不能使用与 Points(i)
相同的索引。有什么建议吗?或者我怎么能用另一种方法做到这一点?
这里的事情是获取图表并删除与“0”值关联的图例和标签。
第一个图形是我当前的输出。
第二个是我的期望输出,以及我希望通过我的代码获得的结果。
具有 0 值的图例是 "Asia" 和 "Latam",但我当前的输出是抛出 "Latam",它应该抛出 "RoW",因为 "RoW" 与 0 值无关,它的值为“5.0%”。
Sub CreateChart()
On Error Resume Next
Sheets(1).ChartObjects.Delete
Dim MyChart As Chart
Dim rowi As Integer
Dim MyRange As Range
rowi = Range("I7").Row ' Index to select last row non empty, in this example it's row number 11.
Do While Sheets(1).Cells(rowi, Range("I7").Column).Value = _
IsEmpty(Cells(rowi, Range("I7").Column))
rowi = rowi + 1
Loop
'----------------------------------------------------CHART---------------------------------------------------------------
Set MyRange = Range("I6:M6" & ",I" & rowi & ":M" & rowi)
Set MyChart = Sheets(1).Shapes.AddChart(xlPie).Chart
MyChart.SetSourceData Source:=MyRange
With MyChart.SeriesCollection(1)
.HasDataLabels = True
.DataLabels.NumberFormat = "0.0%"
End With
With MyChart
.HasLegend = True
End With
For i = 1 To (Range("M6").Column - Range("I6").Column + 1)
If Cells(rowi, Range("I6").Column + i - 1).Value = 0 Then
MyChart.SeriesCollection(1).Points(i).DataLabel.Delete
MyChart.Legend.LegendEntries(i).Delete
End If
Next i
End Sub
托马斯,给你。您遇到的问题是,每次您从 LegendEntries
对象中删除一个图例条目时,其余条目的索引号都会向下移动 1 以填充该孔。所以在你删除索引 3(亚洲)之后,索引 4 变成 3,5 变成 4,依此类推......为了解决这个问题,我只是通过索引号向后退一步,从而确保删除不会影响事物的顺序来了。
Sub CreateChart()
On Error Resume Next
Sheets(1).ChartObjects.Delete
Dim MyChart As Chart
Dim rowi As Integer
Dim MyRange As Range
rowi = Range("I7").Row ' Index to select last row non empty, in this example it's row number 11.
Do While Sheets(1).Cells(rowi, Range("I7").Column).Value = _
IsEmpty(Cells(rowi, Range("I7").Column))
rowi = rowi + 1
Loop
'----------------------------------------------------CHART---------------------------------------------------------------
Set MyRange = Range("I6:M6" & ",I" & rowi & ":M" & rowi)
Set MyChart = Sheets(1).Shapes.AddChart(xlPie).Chart
MyChart.SetSourceData Source:=MyRange
With MyChart.SeriesCollection(1)
.HasDataLabels = True
.DataLabels.NumberFormat = "0.0%"
End With
MyChart.HasLegend = True
For i = (Range("M6").Column - Range("I6").Column + 1) To 1 Step -1 ' <---CHANGED THIS
If Cells(rowi, Range("I6").Column + i - 1).Value = 0 Then
MyChart.SeriesCollection(1).Points(i).DataLabel.Delete
MyChart.Legend.LegendEntries(i).Delete
End If
Next i
End Sub
希望对您有所帮助,如果您有任何问题,请随时提问。
这几天我一直在努力寻找错误或我做错了什么。我在这里显示当前输出及其应该是什么。我想也许我在定义范围时犯了一些错误,或者 LegendEntries(i)
不能使用与 Points(i)
相同的索引。有什么建议吗?或者我怎么能用另一种方法做到这一点?
这里的事情是获取图表并删除与“0”值关联的图例和标签。
第一个图形是我当前的输出。 第二个是我的期望输出,以及我希望通过我的代码获得的结果。
具有 0 值的图例是 "Asia" 和 "Latam",但我当前的输出是抛出 "Latam",它应该抛出 "RoW",因为 "RoW" 与 0 值无关,它的值为“5.0%”。
Sub CreateChart()
On Error Resume Next
Sheets(1).ChartObjects.Delete
Dim MyChart As Chart
Dim rowi As Integer
Dim MyRange As Range
rowi = Range("I7").Row ' Index to select last row non empty, in this example it's row number 11.
Do While Sheets(1).Cells(rowi, Range("I7").Column).Value = _
IsEmpty(Cells(rowi, Range("I7").Column))
rowi = rowi + 1
Loop
'----------------------------------------------------CHART---------------------------------------------------------------
Set MyRange = Range("I6:M6" & ",I" & rowi & ":M" & rowi)
Set MyChart = Sheets(1).Shapes.AddChart(xlPie).Chart
MyChart.SetSourceData Source:=MyRange
With MyChart.SeriesCollection(1)
.HasDataLabels = True
.DataLabels.NumberFormat = "0.0%"
End With
With MyChart
.HasLegend = True
End With
For i = 1 To (Range("M6").Column - Range("I6").Column + 1)
If Cells(rowi, Range("I6").Column + i - 1).Value = 0 Then
MyChart.SeriesCollection(1).Points(i).DataLabel.Delete
MyChart.Legend.LegendEntries(i).Delete
End If
Next i
End Sub
托马斯,给你。您遇到的问题是,每次您从 LegendEntries
对象中删除一个图例条目时,其余条目的索引号都会向下移动 1 以填充该孔。所以在你删除索引 3(亚洲)之后,索引 4 变成 3,5 变成 4,依此类推......为了解决这个问题,我只是通过索引号向后退一步,从而确保删除不会影响事物的顺序来了。
Sub CreateChart()
On Error Resume Next
Sheets(1).ChartObjects.Delete
Dim MyChart As Chart
Dim rowi As Integer
Dim MyRange As Range
rowi = Range("I7").Row ' Index to select last row non empty, in this example it's row number 11.
Do While Sheets(1).Cells(rowi, Range("I7").Column).Value = _
IsEmpty(Cells(rowi, Range("I7").Column))
rowi = rowi + 1
Loop
'----------------------------------------------------CHART---------------------------------------------------------------
Set MyRange = Range("I6:M6" & ",I" & rowi & ":M" & rowi)
Set MyChart = Sheets(1).Shapes.AddChart(xlPie).Chart
MyChart.SetSourceData Source:=MyRange
With MyChart.SeriesCollection(1)
.HasDataLabels = True
.DataLabels.NumberFormat = "0.0%"
End With
MyChart.HasLegend = True
For i = (Range("M6").Column - Range("I6").Column + 1) To 1 Step -1 ' <---CHANGED THIS
If Cells(rowi, Range("I6").Column + i - 1).Value = 0 Then
MyChart.SeriesCollection(1).Points(i).DataLabel.Delete
MyChart.Legend.LegendEntries(i).Delete
End If
Next i
End Sub
希望对您有所帮助,如果您有任何问题,请随时提问。