如何基于VBA中的多个单元有条件地格式化多个形状(自动更新形状)

时间:2019-05-15 13:49:55

标签: excel vba

我正在设计KPI仪表板,需要具有10多种形状,这些形状会根据单元格的值更改颜色。我也希望颜色自动更新。我的问题是我使用的代码只能对每个模块/每页2个形状执行此操作。

我还遇到了颜色更新的问题:仅当在与形状相同的工作簿中更改单元格时,形状才会更改颜色。当我从另一个工作簿更改链接的单元格时,形状的工作簿中的单元格将更新,但是形状不会更新。

我尝试复制代码并更改变量,但这似乎不起作用。有没有一种方法可以遍历所有形状和像元值?

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

    If Intersect(Target, Range("B34", "B35")) Is Nothing Then Exit Sub
            If Sheets("M254 Daimler").Range("B34").Value >= 0.75 And Sheets("M254 Daimler").Range("B34").Value <= 0.84 Then
                            ActiveSheet.Shapes.Range(Array("Donut 10")).Select
                            With Selection.ShapeRange.Fill
                                .Visible = msoTrue
                                .ForeColor.RGB = RGB(255, 255, 0)
                                .Transparency = 0
                                .Solid
                            End With
                            With Selection.ShapeRange.Line
                                .Visible = msoTrue
                                .ForeColor.RGB = RGB(255, 255, 0)
                                .Transparency = 0
                            End With

            End If

            If Sheets("M254 Daimler").Range("B35").Value >= 0.75 And Sheets("M254 Daimler").Range("B35").Value <= 0.84 Then
                            ActiveSheet.Shapes.Range(Array("Donut 31")).Select
                            With Selection.ShapeRange.Fill
                                .Visible = msoTrue
                                .ForeColor.RGB = RGB(255, 255, 0)
                                .Transparency = 0
                                .Solid
                            End With
                            With Selection.ShapeRange.Line
                                .Visible = msoTrue
                                .ForeColor.RGB = RGB(255, 255, 0)
                                .Transparency = 0
                            End With

            End If
End Sub

仅需注意:我已经取出elseif语句,因为它们的格式与if语句相同,并且代码在所有条件下都变得有些重复。

0 个答案:

没有答案