通过在线搜索,我已经能够利用以下代码来删除图表中与 0 值对应的所有标签。现在不幸的是,我需要一个不会根据数据中的实际值删除的代码,而是根据标签内的文本。因为我使用另一个数据表(即“单元格中的值”设置而不是标签选项中的“值”)作为与图表中的图形相对应的标签中的实际文本。
我尝试添加使用 IF AND 的部分,但我不知道如何正确实现,以便根据这两个条件进行删除。
Sub Zero_Label_Remover()
Dim cht As Chart
Dim chtObj As ChartObject
For Each chtObj In ActiveSheet.ChartObjects
Set cht = chtObj.Chart
Dim ser As Series
For Each ser In cht.SeriesCollection
Dim vals As Variant
vals = ser.Values
Dim i As Integer
For i = LBound(vals) To UBound(vals)
With ser.Points(i)
If .HasDataLabel And DataLabel.Text = "" Then
.DataLabel.Delete
End If
End With
Next i
Next ser
Next chtObj
End Sub
所以我尝试更改它查找的参数,以便删除所有空标签,但这段代码根本不起作用。 (如果我删除 if 子句,它会起作用,因为它只是删除所有标签)
Sub Zero_Label_Remover()
'runs through every chart on the ActiveSheet
Dim cht As Chart
Dim chtObj As ChartObject
For Each chtObj In ActiveSheet.ChartObjects
Set cht = chtObj.Chart
Dim ser As Series
Dim pt As Point
For Each ser In cht.SeriesCollection
Dim vals As Variant
vals = ser.Values
If pt.DataLabel.Text = "" Then
pt.HasDataLabel = False
For Each pt In ser.Points
pt.HasDataLabel = False
Next
Next ser
Next chtObj
End Sub
如果有人能给我任何意见,我将不胜感激!
您忘记告诉我们您的“根本不起作用”是什么意思。我猜你是 VBA 评估
AND
子句中的条件的方法的受害者:它将始终评估 all 部分。
语句
If .HasDataLabel And .DataLabel.Text = "" Then
(顺便说一句,你忘记了.
前面的DataLabel
)将检查.HasDataLabel
AND.DataLabel.Text = ""
。但是,如果 .HasDataLabel
为 False(该点没有数据标签),则术语 .DataLabel.Text = ""
将引发异常(对象“Point”的方法“DataLabel”失败)。
在这种情况下,您需要将命令拆分为两个单独的语句:
For i = LBound(vals) To UBound(vals)
With ser.Points(i)
If .HasDataLabel Then
If .DataLabel.Text = "" Then
.DataLabel.Delete
End If
End If
End With
Next i