Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel图表VBA循环遍历数据标签_Vba_Excel_Excel 2010_Excel Charts - Fatal编程技术网

Excel图表VBA循环遍历数据标签

Excel图表VBA循环遍历数据标签,vba,excel,excel-2010,excel-charts,Vba,Excel,Excel 2010,Excel Charts,我有很多工作表,每个工作表上都有一个图,我想在每个图中遍历每个datalabel,删除任何等于0的数据,但似乎无法提取datalabel值 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.

我有很多工作表,每个工作表上都有一个图,我想在每个图中遍历每个datalabel,删除任何等于0的数据,但似乎无法提取datalabel值

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
(忽略通过激活每个图形的每个工作表的循环,该位起作用,因此代码示例保持最少)

有人能建议如何循环数据标签、检查值并在适当的地方删除吗?

您已经接近了

您只错过了检查
数据标签内文本值的
.Caption

我将
DataLabels(l)
更改为
DataLabels.Item(l)
(您的代码中存在不一致性)

OP使用的最终代码:
无法使用
.Item(l)”,但是
.Caption`是使其工作的关键,而且每个
只有一个
数据标签
,因此能够删除其中一个循环,谢谢。@TimWilkinson:Thx,谢谢您的返回,你能建议用你的工作代码对我的答案进行编辑吗?@TimWilkinson:我批准了你的编辑,包括你的最终代码!;)
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
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