根据一系列单元格和图表标题突出显示图表

时间:2015-04-05 09:59:42

标签: excel vba excel-vba

我有一列单元格(范围A2:A10),其中包含学生的姓名。对于每个学生,我有一个以他们的名字命名的图表,跟踪他们在另一张表中的表现。如果它们的名称出现在单元格列中,我想将图表背景更改为浅红色。

1 个答案:

答案 0 :(得分:0)

这是一个相当直接的想法组合。您需要遍历图表,根据列表检查标题,然后更改背景颜色。下面的代码是一个展示这个想法的例子。

在工作表上迭代图表时,首先使用ChartObjects方法。 ChartObject包含对实际图表的引用,您可以在其中获取标题并更改背景。请注意,检查图表的标题没有会引发错误,所以我开始检查Chart.HasTitle。

我正在使用Application.Match来检查范围是否包含标题。如果找不到,将返回错误,因此我正在检查该错误。

最后,如果匹配存在,则通过冗长的属性列表更改图表的背景。如果要更改图表的其他部分,请记录宏以查找正确的属性。

Sub ColorBasedOnTitle()

    Dim chtObj As ChartObject
    Dim sht As Worksheet
    Dim rng_students As Range

    'assume active sheet, change if not
    Set sht = ActiveSheet

    'need to set a reference to the list of names... named range is probably prefered here
    Set rng_students = sht.Range("B3:B6")

    'loop through all charts on sheet
    For Each chtObj In sht.ChartObjects

        'if chart has title, check its value
        Dim title As String
        If chtObj.Chart.HasTitle Then
            title = chtObj.Chart.ChartTitle.Text

            'use Match to see if title is in list of names
            Dim search As Variant
            search = Application.Match(title, rng_students, 0)

            'see if student is in list, change background if so
            If Not IsError(search) Then
                chtObj.Chart.ChartArea.Format.Fill.ForeColor.RGB = RGB(255, 0, 0)
            End If
        End If
    Next chtObj
End Sub

这是我的Excel实例的图片,因此您可以看到结果。请注意,我的名为“F”的图表超出了检查名称的范围,这些名称突出显示为灰色以供强调。

charts after code runs