2013-03-27 116 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

相關問題