Excel-VBA:根据特定参数更改动态表的图表系列颜色

时间:2018-04-04 13:19:51

标签: excel excel-vba excel-2010 dashboard vba

我在Excel中遇到以下问题:

我有一个动态表格,它将提供图形(堆积区域),查找函数的结果返回一个表格,该表格将隐藏“空”的值

这里的问题是,对于不同的选择参数(国家/地区),我获得了不同数量的数据系列(市场参与者)并且顺序不同。

我在该表中有一个帮助列,它以不同的颜色返回与我想要的公司相同的行。

enter image description here 由于可能有更多的MP,我在表中有一些空间,然后过滤表并生成图表。

问题在于我首先尝试:计算系列,因此我不会在尝试引用VBA上的缺失系列时出错(例如,当我有5个系列的代码但查找只返回3)即可。第二个:识别带有公司名称的行(DT)并使其成为图表中的特定颜色,其他颜色将是不同的灰色阴影

我想要做的是(只有部分因为没有空间):

    'Only display non-zero values in the chart chart
    Sheets("Financials").ListObjects("Table2").Range.AutoFilter Field:=7
    Sheets("Financials").ListObjects("Table2").Range.AutoFilter Field:=7, Criteria1:= _
            "IN"

    Dim iSrs As Long, nSrs As Long

    If Sheets("Financials").Range("f98") = "" Then
        GoTo EndPie:
    End If

    With Worksheets("NatCo Dashboard").ChartObjects("Chart 9")
        nSrs = Worksheets("NatCo Dashboard").ChartObjects("Chart 9").Chart.SeriesCollection.Count
        For iSrs = 1 To nSrs
            Select Case nSrs
                Case 1
                    Select Case Sheets("Financials").Range("m98")
                        Case "DT"
                            Worksheets("NatCo Dashboard").ChartObjects("Chart 9").Chart.SeriesCollection(iSrs).Format.Fill.ForeColor.RGB = RGB(226, 0, 116)
                        Case "Orange"
                            Worksheets("NatCo Dashboard").ChartObjects("Chart 9").Chart.SeriesCollection(iSrs).Format.Fill.ForeColor.RGB = RGB(255, 153, 0)
                        Case "EE"
                            Worksheets("NatCo Dashboard").ChartObjects("Chart 9").Chart.SeriesCollection(iSrs).Format.Fill.ForeColor.RGB = RGB(52, 161, 160)
                        Case Else
                            Worksheets("NatCo Dashboard").ChartObjects("Chart 9").Chart.SeriesCollection(iSrs).Format.Fill.ForeColor.RGB = RGB(217, 217, 217)
                    End Select
                Case 2
                    Select Case Sheets("Financials").Range("m98")
                        Case "DT"
                            Worksheets("NatCo Dashboard").ChartObjects("Chart 9").Chart.SeriesCollection(iSrs).Format.Fill.ForeColor.RGB = RGB(226, 0, 116)
                            Worksheets("NatCo Dashboard").ChartObjects("Chart 9").Chart.SeriesCollection(iSrs).Format.Fill.ForeColor.RGB = RGB(217, 217, 217)
                        Case "Orange"
                            Worksheets("NatCo Dashboard").ChartObjects("Chart 9").Chart.SeriesCollection(iSrs).Format.Fill.ForeColor.RGB = RGB(255, 153, 0)
                            Worksheets("NatCo Dashboard").ChartObjects("Chart 9").Chart.SeriesCollection(iSrs).Format.Fill.ForeColor.RGB = RGB(217, 217, 217)
                        Case "EE"
                            Worksheets("NatCo Dashboard").ChartObjects("Chart 9").Chart.SeriesCollection(iSrs).Format.Fill.ForeColor.RGB = RGB(52, 161, 160)
                            Worksheets("NatCo Dashboard").ChartObjects("Chart 9").Chart.SeriesCollection(iSrs).Format.Fill.ForeColor.RGB = RGB(217, 217, 217)
                        Case Else
                            Worksheets("NatCo Dashboard").ChartObjects("Chart 9").Chart.SeriesCollection(iSrs).Format.Fill.ForeColor.RGB = RGB(217, 217, 217)
                            Worksheets("NatCo Dashboard").ChartObjects("Chart 9").Chart.SeriesCollection(iSrs).Format.Fill.ForeColor.RGB = RGB(190, 190, 190)
End Select
                Select Case Sheets("Financials").Range("m99")
                    Case "DT"
                        Worksheets("NatCo Dashboard").ChartObjects("Chart 9").Chart.SeriesCollection(iSrs).Format.Fill.ForeColor.RGB = RGB(217, 217, 217)
                        Worksheets("NatCo Dashboard").ChartObjects("Chart 9").Chart.SeriesCollection(iSrs).Format.Fill.ForeColor.RGB = RGB(226, 0, 116)
                    Case "Orange"
                        Worksheets("NatCo Dashboard").ChartObjects("Chart 9").Chart.SeriesCollection(iSrs).Format.Fill.ForeColor.RGB = RGB(217, 217, 217)
                        Worksheets("NatCo Dashboard").ChartObjects("Chart 9").Chart.SeriesCollection(iSrs).Format.Fill.ForeColor.RGB = RGB(255, 153, 0)
                    Case "EE"
                        Worksheets("NatCo Dashboard").ChartObjects("Chart 9").Chart.SeriesCollection(iSrs).Format.Fill.ForeColor.RGB = RGB(217, 217, 217)
                        Worksheets("NatCo Dashboard").ChartObjects("Chart 9").Chart.SeriesCollection(iSrs).Format.Fill.ForeColor.RGB = RGB(52, 161, 160)
                    Case Else
                        Worksheets("NatCo Dashboard").ChartObjects("Chart 9").Chart.SeriesCollection(iSrs).Format.Fill.ForeColor.RGB = RGB(217, 217, 217)
                        Worksheets("NatCo Dashboard").ChartObjects("Chart 9").Chart.SeriesCollection(iSrs).Format.Fill.ForeColor.RGB = RGB(190, 190, 190)
                End Select
            Case 3

然后就是这样,直到案例5(可能的最大数量)

问题是,最终,图表会将所有内容变为灰色, enter image description here

有没有人知道我可能做错了什么,甚至更好或更合适(更干净)的方式呢?

非常感谢!

0 个答案:

没有答案