2017-05-24 34 views
0

我想寫一個條件案例語句,通過特定的字段,在Excel中搜索特定的字符串,以及何時與單元格的背景顏色更改的字符串匹配。使用Excel的條件案例陳述VBA代碼

如果單元格爲空或不匹配字符串,則單元格不應該發生任何事情。

現在我正試圖遍歷列中的每個單元格,並檢查所有可能的字符串值進行比較,但它似乎並沒有工作。

這裏是我當前的代碼:

Sub interiorsStatus() 

Dim sh As Worksheet 
Dim rw As Range 


Set sh = ActiveSheet 

For Each rw In sh.Rows 
Select Case sh.Cells(rw.Row, "E").Value 

    Case "DELIVERED" 
     result = Range(rw.Row).Interior.ColorIndex = 33 

    Case "READY TO ORDER" 
     result = Range(rw.Row).Interior.ColorIndex = 36 

    Case "ORDERED" 
     result = Range(rw.Row).Interior.ColorIndex = 39 

    Case "DELIVERED" 
     result = Range(rw.Row).Interior.ColorIndex = 43 

    Case "EXISTING" 
     result = Range(rw.Row).Interior.ColorIndex = 40 

    Case "ON HOLD" 
     result = Range(rw.Row).Interior.ColorIndex = 48 

    Case "GENERAL CONTRACTOR" 
     result = Range(rw.Row).Interior.ColorIndex = 2 

    Case "AV & BLINDS" 
     result = Range(rw.Row).Interior.ColorIndex = 15 

    Case "MILLWORK" 
     result = Range(rw.Row).Interior.ColorIndex = 22 

    Case Else 
     result = """" 

    End Select 

    Exit For 

     Next rw 

    End Sub 
+3

'rw.Interior.ColorIndex = 22'會做和'選擇案例rw.cells(1,5)' –

+2

爲什麼不使用條件格式而不是宏? – BruceWayne

+0

'對於每個rw在sh.Rows'應該是'對於每個rw在sh.USEDRANGE.Rows'中,或者您將要檢查1,048,576行。還有其他方法可以找到最後一個非空行。 – Jeeped

回答

2

後的第一時間Exit For停止你的迭代線。我想,這不是,你想要什麼。或者你必須在案例陳述中寫下它。

0
result = Range(rw.Row).Interior.ColorIndex = 40 

這是一項任務。它將result賦值給賦值運算符右邊的表達式的值。

Range(rw.Row).Interior.ColorIndex = 40 

如果你有在賦值運算符的右側,這是一個布爾表達式,它的計算結果TrueFalse。所以result將是True,當ColorIndex40False否則。

然後對result沒有任何處理。

如果您打算實際設置ColorIndex,取出result =交作業的布爾表達式成分配ColorIndex的任務指令。

然後還有另一個問題:在完成第一次迭代之前,您顯式退出循環。如果要實際循環,請刪除Exit For