1

我有一个对象(即包含文本的 ractangle 形状),我希望根据 cel 中的文本(从下拉列表中)改变形状的颜色(状态)。

我目前正在使用“If”函数来格式化形状,我觉得这是最好的方法;但是我不确定如何在 VBA 中运行多个“IF”公式。

我已经运行了一个成功的“如果”公式进行格式化,但这只能在 2 种颜色之间改变。这是我的单一“如果”公式。

If Range("I2") = "Deviation" Then
    Worksheets("M2").Shapes("Rect1").Fill.ForeColor.RGB = RGB(79, 79, 79)
Else
    Worksheets("M2").Shapes("Rect1").Fill.ForeColor.RGB = RGB(0, 102, 204)
End If 

当我向脚本添加其他条件/“如果”公式时,它无法更改对象颜色。我得到的最接近的是'If'和'end If'公式来涵盖所有可能性。这是我最接近的提取物(根据我的经验)。

If Range("I2") = "Yes" Then
    Worksheets("M2").Shapes("Rect1").Fill.ForeColor.RGB = RGB(0, 128, 0)
End If

If Range("I2") = "No" Then
    Worksheets("M2").Shapes("Rect1").Fill.ForeColor.RGB = RGB(218, 9, 4)
End If

If Range("I2") = "In Progress" Then
    Worksheets("M2").Shapes("Rect1").Fill.ForeColor.RGB = RGB(201, 129, 13)
End If

If Range("I2") = "Deviation" Then
    Worksheets("M2").Shapes("Rect1").Fill.ForeColor.RGB = RGB(79, 79, 79)
Else  
    Worksheets("M2").Shapes("Rect1").Fill.ForeColor.RGB = RGB(0, 102, 204)
End If 
4

2 回答 2

0

ElseIf 将是一个改进,但最干净的方法是像这样使用 select:

Select Case Range("I2").Value
    Case "Yes"
        ActiveSheet.Shapes("Rect1").Fill.ForeColor.RGB = RGB(0, 128, 0)
    Case "No"
        ActiveSheet.Shapes("Rect1").Fill.ForeColor.RGB = RGB(218, 9, 4)
    Case "In Progress"
        ActiveSheet.Shapes("Rect1").Fill.ForeColor.RGB = RGB(201, 129, 13)
    Case "Deviation"
        ActiveSheet.Shapes("Rect1").Fill.ForeColor.RGB = RGB(79, 79, 79)
    Case Else
        ActiveSheet.Shapes("Rect1").Fill.ForeColor.RGB = RGB(0, 102, 204)
End Select

这段代码已经过测试,可以在我的电脑上运行。

编辑:为了完整起见,这里是使用 if/elseif/else 的相同代码:

If Range("I2") = "Yes" Then
    ActiveSheet.Shapes("Rect1").Fill.ForeColor.RGB = RGB(0, 128, 0)
ElseIf Range("I2") = "No" Then
    ActiveSheet.Shapes("Rect1").Fill.ForeColor.RGB = RGB(218, 9, 4)
ElseIf Range("I2") = "In Progress" Then
    ActiveSheet.Shapes("Rect1").Fill.ForeColor.RGB = RGB(201, 129, 13)
ElseIf Range("I2") = "Deviation" Then
    ActiveSheet.Shapes("Rect1").Fill.ForeColor.RGB = RGB(79, 79, 79)
Else
    ActiveSheet.Shapes("Rect1").Fill.ForeColor.RGB = RGB(0, 102, 204)
End If
于 2012-07-26T10:24:32.987 回答
0

要添加到 Alexandre 的答案(不要忘记接受它!),您可以进行一些重构以避免重复:

Dim clr As Long

Select Case Range("I2").Value
    Case "Yes": clr = RGB(0, 128, 0)
    Case "No": clr = RGB(218, 9, 4)
    Case "In Progress": clr = RGB(201, 129, 13)
    Case "Deviation": clr = RGB(79, 79, 79)
    Case Else: clr = RGB(0, 102, 204)
End Select

ActiveSheet.Shapes("Rect1").Fill.ForeColor.RGB = clr
于 2012-07-26T16:04:27.590 回答