Excel VBA 根据标签文本而非值选择和删除标签

问题描述 投票:0回答:1

通过在线搜索,我已经能够利用以下代码来删除图表中与 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

如果有人能给我任何意见,我将不胜感激!

excel vba charts
1个回答
0
投票

您忘记告诉我们您的“根本不起作用”是什么意思。我猜你是 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
© www.soinside.com 2019 - 2024. All rights reserved.