2017-10-16 4 views
0

ユーザーがボタンをクリックしたときにシステムが現在の日付と書かれた日付を比較し、セルを適切な色で塗りつぶすコードがあります。私のコードのエラーはどこですか?

2日前に10-16-2017と書いた場合、背景が赤く塗りつぶされるという問題があります。今日チェックすると色が黄色に変わります。 問題は、いったんセルが色付けされると決して色を変えないということです。

:最初の色が赤になりますので

日2017年10月16日には3前に書かれました。

今日は10-16-2017ですので、ボタンを押すと黄色に変わります。

は、ここに私のコードです:

Private Sub CommandButton1_Click() 
    Dim i As Integer 

    For i = Range("C5000").End(xlUp).Row To 2 Step -1 'Range upto 5000, chnge this as per your requirment' 
     If IsEmpty(Cells(i, 3)) Then 
      Exit Sub 
     ElseIf (VBA.CDate(Cells(i, 3)) - VBA.Date()) < 0 Then 
      Cells(i, 3).Interior.Color = vbGreen 

     ElseIf (VBA.CDate(Cells(i, 3)) - VBA.Date()) = 0 Then 
      Cells(i, 3).Interior.Color = vbYellow 

     ElseIf (VBA.CDate(Cells(i, 3)) - VBA.Date()) >= 1 And (VBA.CDate(Cells(i, 3)) - VBA.Date()) <= 4 Then 
      Cells(i, 3).Interior.Color = vbRed 

     ElseIf (VBA.CDate(Cells(i, 3)) - VBA.Date()) >= 5 And (VBA.CDate(Cells(i, 3)) - VBA.Date()) <= 10 Then 
      Cells(i, 3).Interior.Color = vbCyan 

     Else 
      Cells(i, 3).Interior.ColorIndex = xlNone 
     End If 
    Next 
End Sub 
+2

これは私の目的のために完全に機能します。ワークシート参照の不足のために、それはあなたの間違った場所を指している可能性がありますか?ワークシートとしてDim ws = ActiveWorkbook.Sheets( "Whatever_Your_Sheet_Name_Is") 'を設定し、すべての範囲/セルを' ws.Range(...) 'と' ws.Cell(...) 'として指定します。それが役立つかどうかを確認してください。 –

+0

みんな私が今10-14-2017を書いてボタンをクリックすると緑色に変わってしまうのですが...もし私が10-14-2017に10-14-2107を書いていたら、それは黄色になります。私の問題であることは決して変わりません –

+0

はい、2日前から '<0'です。 – danieltakeshi

答えて

0

のisEmpty(セル(I、3))して終了サブがあなたの問題である場合。 範囲内に空白のセルがある場合、そのセルが見つかると、コードは停止します。

この行を編集してください。あなたのコードはうまくいくでしょう。

If IsEmpty(Cells(i, 3)) Then 
     Cells(i, 3).Interior.Color = xlNone 
関連する問題