Excel 图表 VBA 遍历数据标签
Excel chart VBA loop through datalabels
我有很多 sheet,每个都有一个图表,我想循环遍历每个图表中的每个数据标签,删除任何等于 0 的值,但似乎无法提取数据标签值。
With ActiveChart
For k = 1 To .SeriesCollection.Count
For j = 1 To .SeriesCollection(k).Points.Count
For l = 1 To .SeriesCollection(k).Points(j).DataLabels.Count
If .SeriesCollection.Points(j).DataLabels(l) = 0 Then
.SeriesCollection.Points(j).DataLabel(l).Delete
End If
Next l
Next j
Next k
End With
(忽略通过每个 sheet 激活每个图的循环,该位有效,因此保持代码示例最少)
谁能建议如何循环数据标签、检查值并在适当的地方删除?
你很接近!
您只是错过了 .Caption
来检查 DataLabel
!
中文本的值
我将 DataLabels(l)
更改为 DataLabels.Item(l)
(您的代码中存在不稳定因素)。
With ActiveChart
For k = 1 To .SeriesCollection.Count
For j = 1 To .SeriesCollection(k).Points.Count
For l = 1 To .SeriesCollection(k).Points(j).DataLabels.Count
If .SeriesCollection.Points(j).DataLabels.Item(l).Caption = 0 Then
.SeriesCollection.Points(j).DataLabels.Item(l).Delete
End If
Next l
Next j
Next k
End With
OP 使用的最终代码:
With ActiveChart
For k = 1 To .SeriesCollection.Count
For j = 1 To .SeriesCollection(k).Points.Count
If .SeriesCollection(k).Points(j).DataLabel.Caption = 0 Then
.SeriesCollection(k).Points(j).DataLabel.Delete
End If
Next j
Next k
End With
我有很多 sheet,每个都有一个图表,我想循环遍历每个图表中的每个数据标签,删除任何等于 0 的值,但似乎无法提取数据标签值。
With ActiveChart
For k = 1 To .SeriesCollection.Count
For j = 1 To .SeriesCollection(k).Points.Count
For l = 1 To .SeriesCollection(k).Points(j).DataLabels.Count
If .SeriesCollection.Points(j).DataLabels(l) = 0 Then
.SeriesCollection.Points(j).DataLabel(l).Delete
End If
Next l
Next j
Next k
End With
(忽略通过每个 sheet 激活每个图的循环,该位有效,因此保持代码示例最少)
谁能建议如何循环数据标签、检查值并在适当的地方删除?
你很接近!
您只是错过了 .Caption
来检查 DataLabel
!
我将 DataLabels(l)
更改为 DataLabels.Item(l)
(您的代码中存在不稳定因素)。
With ActiveChart
For k = 1 To .SeriesCollection.Count
For j = 1 To .SeriesCollection(k).Points.Count
For l = 1 To .SeriesCollection(k).Points(j).DataLabels.Count
If .SeriesCollection.Points(j).DataLabels.Item(l).Caption = 0 Then
.SeriesCollection.Points(j).DataLabels.Item(l).Delete
End If
Next l
Next j
Next k
End With
OP 使用的最终代码:
With ActiveChart
For k = 1 To .SeriesCollection.Count
For j = 1 To .SeriesCollection(k).Points.Count
If .SeriesCollection(k).Points(j).DataLabel.Caption = 0 Then
.SeriesCollection(k).Points(j).DataLabel.Delete
End If
Next j
Next k
End With