2017-06-22 172 views
0

在我的主表中,我有一個列(列C),其中將輸入長16位數的代碼。下一列(D列)用公式「= MID(列C中的單元格,16,6」)得出該代碼的最後6位數。如果較長代碼的最後6位數等於我列出的任何代碼Case聲明在代碼中,F列中的相應單元格應該變成紅色,以向用戶指示列F中的單元格需要代碼,一旦F列單元格變成紅色,用戶能夠點擊F中的該單元格列,並且它將用戶帶到另一個代碼列表中,用戶可以雙擊任何代碼,並且將它填充到主表中的F列當單元格中的值改變單元格顏色

到目前爲止,當代碼填充F列,它變成了一個沒有填充的背景(我想)但是,當我在相同行中的任何單元中輸入任何其他數據時,F列中的單元格會變回紅色,代碼仍在單元格中。我需要F列中的單元格在輸入數據後保留無填充背景,除非代碼已從單元格中刪除,然後它可以變回紅色以向用戶指示此單元格需要值。當代碼仍在其中時,我不能讓單元變紅。我覺得自己好像有點接近,但我不太瞭解VBA語法,無法讓這個功能正常工作。任何建議將不勝感激。

在此先感謝。 我將代碼發佈到下面的主片/形式:

Option Explicit 

Private Sub Worksheet_Change(ByVal Target As Range) 

     Dim c As Range: Set c = Range("D7:D446") 
     Dim d As Range: Set d = Range("F7:F446") 

For Each c In c.Cells 
      Select Case c.Value 
       Case "1000GP", "1000MM", "19FEST", "20IEDU", "20ONLC", "20PART", "20PRDV", "20SPPR", "22DANC", "22LFLC", "22MEDA", "530CCH", "60POUBL", "74GA01", "74GA17", "74GA99", "78REDV" 
        Cells(c.Row, "F").Interior.ColorIndex = 3 
       Case Else 
       Cells(c.Row, "F").Interior.ColorIndex = 0 
      End Select 
     Next c 
     If Not Application.Intersect(d, Range(Target.Address)) _ 
      Is Nothing Then 
     Target.Interior.ColorIndex = 0 

     End If 

End Sub 
+0

您的代碼只在D列中的某些內容未更改時激活。 – UGP

+0

@UGP非常感謝您的回答。這工作。當我選擇一個代碼時,它現在填充F列中的單元格,並將單元格變回爲無填充顏色。但是,當我從F列的單元格中刪除該代碼時,我希望F單元格變回紅色。截至目前,它只是在刪除後保持不填充背景顏色。你會碰巧知道我該怎麼做呢?再次感謝!非常感激。 – anve

+0

我添加了一個簡短的版本,你可能想看看。如果F中的值是「」 – UGP

回答

1

大概是這樣的:

每一個細胞都在範圍:

Option Explicit 

Private Sub Worksheet_Change(ByVal Target As Range) 

    Dim c As Range: Set c = Union(Range("D7:D446"), Range("F7:F446")) 
    Dim CellF As Range, CellD As Range, Cell As Range 

If Not Application.Intersect(c, Range(Target.Address)) _ 
      Is Nothing Then 

    For Each Cell In c 
     Set CellF = Range("F" & Cell.Row) 
     Set CellD = Range("D" & Cell.Row) 

     If CellF.Value <> "" Then 
      CellF.Interior.ColorIndex = 0 
     Else 
      Select Case CellD.Value 
      Case "1000", "1000MN", "19FET", "20IDU", "20ONC", "20RT", "20DV", "20SPPR", "22DC", "22LF", "22ME", "530H", "60UBL", "74G1", "74GA", "74A9", "78RV" 
        CellF.Interior.ColorIndex = 3 
      Case Else 
       CellF.Interior.ColorIndex = 0 
      End Select 
     End If 
    Next Cell 
End If 
End Sub 

僅將單元:

Option Explicit 

Private Sub Worksheet_Change(ByVal Target As Range) 

    Dim c As Range: Set c = Union(Range("D7:D446"), Range("F7:F446")) 
    Dim CellF As Range, CellD As Range, Cell As Range 

If Not Application.Intersect(c, Range(Target.Address)) _ 
      Is Nothing Then 

     Set CellF = Range("F" & Target.Row) 
     Set CellD = Range("D" & Target.Row) 

     If CellF.Value <> "" Then 
      CellF.Interior.ColorIndex = 0 
     Else 
      Select Case CellD.Value 
      Case "1000", "1000MN", "19FET", "20IDU", "20ONC", "20RT", "20DV", "20SPPR", "22DC", "22LF", "22ME", "530H", "60UBL", "74G1", "74GA", "74A9", "78RV" 
        CellF.Interior.ColorIndex = 3 
      Case Else 
       CellF.Interior.ColorIndex = 0 
      End Select 
     End If 

End If 
End Sub 
0

我認爲最簡單的方法就是在F列上添加條件格式所以如果單元格不是空白的,那麼就沒有填充。 This link有關於如何操作的更多信息,但基本上在條件格式框中執行NOT(ISBLANK())。