Excel VBA-根据源字体的颜色数据标签(“来自单元格的值”)

时间:2018-08-08 21:38:14

标签: excel vba excel-vba

我必须在excel 2016中运行许多条形图,每个条形图都显示该公司在特定国家/地区的季节性表现。我希望在每个栏的顶部看到此格式的%Change [Color10] 0%“▲”; [Red] -0%“▼”。我之所以添加数据标签,是因为我使用了“来自单元格的值”功能来显示%Change而不是所售金额。现在一切就绪,我的百分比很好地放在了条形图的顶部,但是我无法自动为它们上色(正绿色和负红色)。我尝试直接从位于“数字”下的格式窗口中对标签进行格式化,但是我发现当使用“来自单元格的值”派生标签内容时,它根本无法使用。

所以我开始研究VBA,但是由于我对编程一无所知,所以没有成功。我正在寻找一个更改图表数据标签的代码,以使它们保持源字体(在源中,我的%Change值已采用所需的格式([Color10] 0%“▲”; [Red ] -0%“▼”)。谷歌搜索,我发现了不同的解决方案,但没有一个起作用。我将发布对我来说看起来更好的解决方案。

public abstract class BaseNode
{
    public IList<BaseNode> Children
    { get; } = new List<BaseNode>();
}

public class NodeClassA : BaseNode { }
public class NodeClassB : BaseNode { }
public class NodeClassC : BaseNode { }

这是唯一实际运行的标签,我的标签全为白色。随着以下我遇到错误。

Sub legend_color()
Dim SRS As Series
With ActiveChart
For Each SRS In .SeriesCollection
SRS.ApplyDataLabels AutoText:=True, LegendKey:= _False, 
ShowSeriesName:=False, 
ShowCategoryName:=False, 
ShowValue:=True, _ ShowPercentage:=False, 
ShowBubbleSize:=False
SRS.DataLabels.Font.ColorIndex = SRS.Border.ColorIndex
Next SRS
End With
End Sub

非常感谢您的帮助, 托马索

1 个答案:

答案 0 :(得分:0)

如果只是缺少颜色,则可以使用以下格式设置每个标签的格式:

Sub Tester()

    Dim s As Series, dl As DataLabels, d As DataLabel
    Dim i As Long, rngLabels

    Set s = ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1)

    Set dl = s.DataLabels

    'Option 1: set label color based on label value
    For i = 1 To dl.Count
        With dl(i)
            .Font.Color = IIf(Val(.Text) < 0, vbRed, vbGreen)
        End With
    Next i


    'Option 2: set label color based on label source cell
    '  Note use of DisplayFormat to pick up custom
    '   formatting colors
    Set rngLabels = Range("C7:C13")'<< source range for data labels
    For i = 1 To dl.Count
        dl(i).Font.Color = rngLabels(i).DisplayFormat.Font.Color
    Next i
End Sub