簡體   English   中英

值在單元格中時更改單元格顏色

[英]Changing cell color when value is in cell

在我的主表中,有一列(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

大概是這樣的:

范圍內的每個單元格:

    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

我認為最簡單的方法是在F列上添加條件格式,以便在單元格不為空的情況下不填充。 此鏈接具有有關如何執行此操作的更多信息,但是您基本上可以在條件格式框中執行NOT(ISBLANK())。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM