2017-08-01 55 views
0

我有第一列的日期。 (2016年7月30日)。我想浏览整个专栏,看看它是否是目前的月份。如果它不等于八月,那么我想(1月 - 7月)变成绿色,其中8月份变成白色,而当它变成未来时,它应该变成黄色。查找月份并为单元格值着色

我试过下面的代码。它正在打印黄色。它只是寻找今天而不是本月。

你能帮我怎么能执行

Sub ChangeColour() 

    Dim rCell As Range 

    With Sheets("BU") 
     For Each rCell In .Range("I5", .Cells(.Rows.Count, 9).End(xlUp)).Cells 
      If rCell.Value < Month(today) Then 
       rCell.Interior.Color = vbGreen 
      ElseIf rCell.Value > Month(today) Then 
       rCell.Interior.Color = vbYellow 
      Else 
       rCell.Interior.Color = vbWhite 
      End If 
     Next rCell 
    End With 

End Sub 
+0

为什么你不使用条件格式为此?应该比VBA更容易。我想在VBA中使用 –

+0

。 :( – Jenny

回答

2

您需要检查的日期(单元格值)的月对今天的月份。今天也是一个从未定义的变量,因此您需要使用Month(Date)

例如:

Month(rCell.Value) < Month(Date) 
+1

我觉得'月(日期)'是够好的;) –

+0

我相信它应该是月(日期)。至少在我今天的excel中只有工作表函数,但不在vba中。 –

+0

确定你是对的,只是在我发布答案后才看到它。有时我应该首先考虑。 –

0
Sub ChangeColour() 
Dim rCell As Range 
With Sheets("BU") 
    For Each rCell In .Range("I5", .Cells(.Rows.Count, 9).End(xlUp)).Cells 
     If Month(rCell.Value) < Month(DateTime.Now) Then 
      rCell.Interior.Color = vbGreen 
     ElseIf Month(rCell.Value) > Month(DateTime.Now) Then 
      rCell.Interior.Color = vbYellow 
     Else 
      rCell.Interior.Color = vbWhite 
     End If 
    Next rCell 
End With 
End Sub 
+0

这不起作用,因为'today'在这里是一个未声明的变量。 –

+0

@Peh谢谢没有看到(固定它) – Tizzu

+0

,你可能会看到接受的答案的讨论,我们得出的结论是“Month(Date)”已经足够,并且可能比'Now'更可取,它也提供了确切的时间。所以这正是我已经回答的。 –

0

如果您单元的日期是文字,代码会是这样。

Sub ChangeColour() 

    Dim rCell As Range 
    Dim m As Integer, vSplit 

    With Sheets("BU") 
     For Each rCell In .Range("I5", .Range("i" & Rows.Count).End(xlUp)) 
      vSplit = Split(rCell, ".") 
      m = vSplit(1) 
      If m < Month(Date) Then 
       rCell.Interior.Color = vbGreen 
      ElseIf m > Month(Date) Then 
       rCell.Interior.Color = vbYellow 
      Else 
       rCell.Interior.Color = vbWhite 
      End If 
     Next rCell 
    End With 

End Sub