2012-06-27 23 views
1

我是StackOverflow和VBA的新手。我是Excel的各個方面的專家,除了從頭開始編寫VBA代碼。如果活動單元格eqauls應用內部顏色特定文本 - VBA

我想要做的是將索引的顏色應用到單元格的內部,如果它包含特定的術語。以下是我有:

Sub ConditionalFormatting() 

Do Until ActiveCell = "" 

If ActiveCell = "STAR DISTRICT" Then 
ActiveCell.Interior.ColorIndex = 50 
ElseIf ActiveCell = "STAR SCHOOL" Then 
ActiveCell.Interior.ColorIndex = 50 
ElseIf ActiveCell = "HIGH PERFORMING" Then 
ActiveCell.Interior.ColorIndex = 43 
ElseIf ActiveCell = "SUCCESSFUL" Then 
ActiveCell.Interior.ColorIndex = 34 
ElseIf ActiveCell = "ACADEMIC WATCH" Then 
ActiveCell.Interior.ColorIndex = 38 
ElseIf ActiveCell = "LOW PERFORMING" Then 
ActiveCell.Interior.ColorIndex = 22 
ElseIf ActiveCell = "AT RISK OF FAILING" Then 
ActiveCell.Interior.ColorIndex = 18 
ElseIf ActiveCell = "FAILING" Then 
ActiveCell.Interior.ColorIndex = 3 
Else: ActiveCell.Interior.ColorIndex = 1 
End If 

ActiveCell.Offset(1, 0).Select 

Loop 

End Sub 

的選項有: 北辰區或學校, 高性能,高 成功, 學術關注, 性能低, 在失敗的風險, 失敗

此代碼適用於一列(除了最下面的兩個術語),但它不適用於工作表中的其他任何地方。當我在其他地方嘗試時,無論單元格包含什麼,所有單元格都會變黑(或ColorIndex = 1)。

任何幫助將不勝感激。

特倫頓

+1

你爲什麼不只是使用條件格式? – Jesse

+0

條件格式只有三個條件。正如你所看到的,我有8個條件。 – user1486326

+1

是的,但它們是互斥的。你可以添加8個條件格式。 – Jesse

回答

1

沒有在您的Excel電子表格中看到您輸入的數據,這是很難說究竟爲什麼這是真的:

This code works for one column (except for the bottom two terms) but it will not work anywhere else in the worksheet. When I try it anywhere else, all of the Cells turn Black (or ColorIndex = 1) no matter what the cell contains.

然而,在默認情況下VBA字符串比較是一個二進制比較,這意味着它將區分大小寫,並將ActiveCell與各種大寫字符串進行比較。如果您的Excel電子表格包含任何內容但全部大寫,則所有測試都將失敗。

你需要做2件事之一。首先,您可以將Option Compare Text添加到代碼表的頂部。這會將所有比較更改爲Text而不是Binary比較。

或者你可以用在UCASE功能各ActiveCell,將執行比較之前利用活動單元格中的任意值:

If UCase(ActiveCell) = "STAR DISTRICT" Then 
... 
ElseIf UCase(ActiveCell) = "STAR SCHOOL" Then 
... 
... 
... 
End If 

編輯:正如你在評論中提到

中,問題是單元格值中的空格後面,適當的代碼修復是將ActiveCell包裝在Trim函數中。你可以互相喜歡裏面嵌套函數:

If UCase(Trim(ActiveCell)) = "STAR DISTRICT" Then 
... 
ElseIf UCase(Trim(ActiveCell)) = "STAR SCHOOL" Then 
... 
... 
... 
End If 

這將在ActiveCell修剪任何尾隨和前導空格,從數值則使其大寫來比較你的標記值。

+0

所有單元格和代碼中已經大寫。 – user1486326

+0

@ user1486326 - 您發佈的代碼完全符合我的想法。我發現的唯一潛在問題是大寫與小寫。 – psubsee2003

+0

@ user1486326我建議的另一件事是更深入地挖掘您的電子表格數值。確保你沒有任何拼寫錯誤,並且沒有前後空格,因爲它們也會導致檢查失敗。利用'Debug.Print'函數和中間窗口來查看代碼運行時'ActiveCell'包含的內容(這會減慢代碼的速度,因此不要將它用於整列數據,除非您願意等待)。 – psubsee2003

1

那麼我不知道你想在哪個範圍應用此代碼。從我在代碼中看到的你想讓VBA在ActiveCell上應用這個「格式化」,然後選擇下面的另一個單元格並重復「條件格式化」過程,然後選擇另一個單元格(與ActiveCell.Offset(1, 0).Select)等等,直到它絆倒第一個空單元格。

爲此,代碼應該基本上工作(我已經嘗試過)並根據您的情況更改它所處理單元的內部顏色索引。由於這個宏適用於一列中的單元格,從ActiveCell到最後一個非空單元格,我不明白你打算如何在兩列上使用它。

此宏將任何單元格變爲ColorIndex爲1的原因可能只是它包含的文本不屬於「條件列表」的一部分。還要記住,大寫和小寫字符是不同的字符,因此單元格中的值必須與代碼中的單詞/字符串完全一致,或者可以增強代碼以將單詞中的所有字母轉換爲大寫字母(使用UCase例如)

你可以試試這個代碼適用的格式有問題的每一個細胞中所選擇的範圍:

Sub ConditionalInteriorColor() 

Dim r As Range 
Dim cell As Range 
Dim index As Integer 
Dim word As String 

    'Set the targeted range to be the selected range 
Set r = Selection 

For Each cell In r 

    word = UCase(cell.Value) 

    'Choose index 
    Select Case word 
     Case "STAR DISTRICT" 
      index = 50 
     Case "STAR SCHOOL" 
      index = 50 
     Case "HIGH PERFORMING" 
      index = 43 
     Case "SUCCESSFUL" 
      index = 39 
     Case "ACADEMIC WATCH" 
      index = 38 
     Case "LOW PERFORMING" 
      index = 22 
     Case "AT RISK OF FAILING" 
      index = 20 
     Case "FAILING" 
      index = 3 
     Case Else 
      index = 3 
    End Select 
    'Color interior of cell 
    cell.Interior.ColorIndex = index 

Next 

End Sub 
+0

我想讓它做一列,然後結束。然後我將它移到下一列並運行宏,但它不起作用。我只希望它能在整個電子表格中做兩列,並且我希望能夠在每列之後檢查它。這就是爲什麼我只是把代碼結束在列的底部。 列中的所有字符均爲大寫字母,並且列中只有列的選項才包含在代碼中。 – user1486326

+0

如果它把你的細胞染成黑色,那麼你知道它有效:)而唯一的問題是條件設置。所以用UCase試試吧,它應該可以工作。我想不出任何其他原因,爲什麼這樣簡單的代碼不起作用(除了活動單元格爲空)。 –

+0

問題在於,將單詞輸入到單元格中的人在一列中的所有元素之後留下空格,而在另一列中的兩個元素之後留下空格。問題解決了。 – user1486326

相關問題