2012-07-26 15 views
1

我有一個對象(即一個包含文本的矩形形狀),我希望形狀變化的顏色(狀態)取決於一個單元格內的文本(從下拉列表)。VBA中單個對象上的多個條件格式

我現在使用'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 
+1

你可以嘗試[編輯您的問題(http://stackoverflow.com/posts/11666218/edit)和正確縮進代碼,然後選擇它,然後按' {}'按鈕使它看起來不錯? – assylias 2012-07-26 09:27:42

+1

您需要使用語句「ElseIf」。在這種情況下,我可能會選擇案例。 – Trace 2012-07-26 09:50:24

回答

0

要添加到亞歷山大的回答(不要忘了接受它!),你可以重構一點,以避免重複:

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 
+0

這幾乎是完美的,但是隻有當我將宏指定給一個按鈕時,對象的顏色纔會更新。我beleiev這是我需要弄清楚,也許一個設置是一個錯誤! 無論如何,非常感謝! – 2012-07-31 13:42:35

+0

你會從worksheet_change事件中調用它。 – 2012-07-31 15:00:06

0

elseif的將是一個進步,但最乾淨的方法是隻用選擇這樣的:

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 /其他相同的代碼:

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 
+0

嘿,謝謝......它看起來像它會工作,我剛剛與另一個答案,因爲我foudn它第一..謝謝! – 2012-07-31 13:41:42