2017-06-22 143 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())。