vba - 删除值为零的数据标签然后重置 - VBA

标签 vba excel loops charts

如果单元格的值为 0%,我有一个代码可以从自定义饼图中删除数据标签。但是,由于我的代码循环以使数据发生变化,因此我完全丢失了该特定类别的标签,因此当添加一组新数据并且值不为零时,标签不再出现。我该怎么做才能在值为 0 时删除数据标签,但当值不是零时它会重新出现,本质上是重置图表的原始设置,以便所有值/类别都有数据标签。

  Sub ChartLoop()

       Range("D2").Select
        ActiveCell.Range("C1:E1").Select

    Dim myPDF As String
    Dim i As Long

        For counter = 2 To 21

            Sheets("CF").Select
            Range("'CF'!$D$" & counter & ":$F$" & counter).Select 'numbers
            Selection.Copy
            Sheets("CF-Chart").Select
            Range("B1:B3").Select
            Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
                False, Transpose:=True

  'this is for removing the data labels        
        Dim iPts As Integer
        Dim nPts As Integer
        Dim aVals As Variant
        Dim srs As Series

        ActiveSheet.ChartObjects("Chart 5").Activate
            For Each srs In ActiveChart.SeriesCollection
                With srs
                    If .HasDataLabels Then
                        nPts = .Points.Count
                        aVals = .Values
                        For iPts = 1 To nPts
                            If aVals(iPts) = 0 Then
                                .Points(iPts).HasDataLabel = False
                            End If
                        Next
                    End If
                End With
            Next


           ActiveSheet.ChartObjects("Chart 5").Activate
           ActiveChart.ChartArea.Select
           myPDF = "\\stchsfs\arboari$\Profile-Data\Desktop\Export Trial1\c2-" & Sheets("CF").Range("C" & i + 2).Value2 & ".pdf"
            ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=myPDF, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
        i = i + 1
        Next counter

    End Sub

第一个图表是我的常规图表的样子。第二个图表是我想删除值为 0 的数据标签,但保留数据标签的类别和值 > 0 的其他数据标签。
Chart1 Chart2

谢谢!

最佳答案

也许改变

If aVals(iPts) = 0 Then
    .Points(iPts).HasDataLabel = False
End If

到这个?
If aVals(iPts) = 0 Then
    .Points(iPts).HasDataLabel = False
    .DataLabels.ShowValue = False
Else
    .Points(iPts).HasDataLabel = True
    .DataLabels.ShowValue = True
End If

编辑 2018 年 4 月 27 日

好的......我已经测试了这个解决方案,它对我有用。不是最优雅的,但它有效。请让我知道这对你有没有用 -
ActiveSheet.ChartObjects("Chart 5").Activate

With ActiveChart.SeriesCollection(1)
    For i = 1 To .Points.Count
        If .Points(i).HasDataLabel = False Then
            .Points(i).Select
            ActiveChart.SetElement (msoElementDataLabelShow)
                If .Points(i).DataLabel.Text = 0 Then
                    .Points(i).HasDataLabel = False
                    .Points(i).DataLabel.ShowValue = False
                End If
        ElseIf .Points(i).DataLabel.Text = 0 Then
            .Points(i).HasDataLabel = False
            .Points(i).DataLabel.ShowValue = False
        End If
    Next i
End With

关于vba - 删除值为零的数据标签然后重置 - VBA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50048795/

相关文章:

javascript - 单击按钮时页面显示所有语义 UI 模态

vba - Excel VBA - 出现运行时错误 1004 - 无法访问文件

excel - 如何替换 Excel 中特定的未知字符?

c++ - 更现代的循环 C++ 数组的方式

c# - 检查 list<t> 是否包含任何其他列表

vba - 错误处理程序中的错误处理

ms-access - 过滤报告查询

vba - 文件路径根据单元格值更改 (VBA)

excel - 在偏移副本中复制值而不是公式

vba - 单击单元格时如何运行代码?