2013-03-27 118 views
1

我想在VBA中使用基于特定条件的高亮显示功能。我可以很容易地通过条件格式来做到这一点,但我注意到,如果用户剪切/粘贴(非特殊)/删除行/等。然后修改条件格式范围。我希望条件格式范围保持固定而不是映射到实际单元格。如果有人知道如何做到这一点,或保护条件格式,但仍然允许数据操作,那么这个代码将是不必要的。根据日期和其他条件突出显示单元格

我发现了两种不同的代码,我一直在尝试,但由于我是VBA新手,我并不擅长并遇到问题。我不知道如何使用Isblank或Isempty功能。

我需要突出显示从现在起30天之前(包括通过日期)的日期为红色的日期。我需要突出显示从现在开始的60天之前的日期,而以黄色显示超过30天的日期。没有数据和细胞超过60天的细胞必须保持不被强调。

任何帮助,非常感谢!

Private Sub Worksheet_Change(ByVal Target As Range) 

Dim icolor As Integer 

    If Not Intersect(Target, Range("C3:T65")) Is Nothing Then 

     Select Case Target 

      Case Is <= Date + 60 

       icolor = 6 

      Case Is <= Date + 30 

       icolor = 3 

      Case IsEmpty() 

       icolor = 2 

     End Select 


     Target.Interior.ColorIndex = icolor 

    End If 

End Sub 

其他选项:

Sub Highlight() 
    Dim cell As Range 

    For Each cell In Range("C3:T65") 
     If cell.Value <= Date + 60 And cell.Value > Date + 30 Then 
      cell.Offset(0, 1).Interior.ColorIndex = 6 

     ElseIf cell.Value <= Date + 30 Then 
      cell.Offset(0, 1).Interior.ColorIndex = 3 

     ElseIf cell.Value IsEmpty() Then 
      cell.Offset(0, 1).Interior.ColorIndex = 2 

     End If 
    Next cell 

End Sub 

回答

0

目前您的代码几乎没有。以下两者的结合应该做的工作:

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim icolor As Integer 
    Dim cell As Range 

    If Intersect(Target, Range("C3:T65")) Is Nothing Then Exit Sub 

    For Each cell In Target 
     icolor = 0 
     Select Case cell 
      Case Is <= Date + 30: icolor = 3 
      Case Is <= Date + 60: icolor = 6 
      Case "": icolor = 2 
     End Select 
     If icolor <> 0 Then cell.Interior.ColorIndex = icolor 
    Next cell 
End Sub 
+0

我得到一个编译错误:“Case without Select Case”和“Case cell”突出显示。 我在某处插入“Do Select”吗? – user2214690 2013-03-27 22:25:42

+0

我在“Case cell”之前插入了“Select”并且它工作正常。但是,现在我有一个问题: 如果我选择一个单元格并点击“Backspace”,则单元格变为黄色,尽管它是空的。另外,'Case Is <= Date + 60'覆盖'Case Is <= Date + 30'。关于如何使黄色包含从>日期+30到<=日期+60的任何想法? – user2214690 2013-03-27 22:32:15

+0

我明白了。我以相反的顺序重新安排了案例线,并修复了它。非常感谢!! – user2214690 2013-03-27 22:35:30

0

检查电池是空使用VBNullString:

ElseIf cell.Value = vbNullString Then 
+0

这是因为我在上面的地方'elseif的cell.Value的IsEmpty()Then'上市第二编码? – user2214690 2013-03-27 22:20:54

+0

确实。你几乎在那里,但你在 – 2013-03-27 22:33:27

+0

的条件下使用了电子表格公式,我操纵了彼得阿尔伯特的代码,它运行良好。 我刚刚尝试使用您的更改,并且脚本返回时没有错误,但未能正确突出显示。很多随机细胞被突出显示为红色。我试图重新安排ElseIf和If代码以查看它是否会执行任何操作,但随后会引发新的突出问题。 感谢您的帮助。 – user2214690 2013-03-27 22:40:59

相关问题