gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 20:31:21 25 4
gpt4 key购买 nike

如果单元格的值为 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com