2017-10-19 16 views
0

j'ai le code VBA que l'enregistrement entré dates avec la date et remplir la cellule dans la couleur et vérifier qu'elle est appropriée si le colomn « F » n'est pas vide, il sera la couleur de la D, E, F colonnes. Le problème est que j'ai jusqu'à présent 21 enregistrements mais le système ne fait que colorer 19 enregistrement même si les 2 lignes ne sont pas vides dans la colonne F.où est l'erreur dans la deuxième instruction IF

code:

Private Sub CommandButton1_Click() 

Dim i As Long 

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 
     Cells(i, 3).Interior.Color = xlNone 

     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 

    ' your 2nd criteria to color the entire row if "F" is not empty 
    If Trim(Range("F" & i).Value) <> "" Then Range("D" & i & ":F" & i).Interior.ColorIndex = 15 



Next 
End Sub 
+0

Pourquoi utiliser VBA pour cela? On dirait un travail pour 'Formatage conditionnel'. –

+0

oui je sais mais je veux le faire en utilisant vba –

+0

Le code semble ok. Utilisez 'debug.print len ​​(Range (" F "& i) .Value)' pour vérifier si les cellules sont vides –

Répondre

0

est peut-être quelque chose avec vos données, il fonctionne correctement pour moi. Quel genre de données avez-vous dans la colonne F?

+0

f la colonne contient la date –

+0

Ceci ne fournit pas de réponse à la question. Une fois que vous avez suffisamment [réputation] (https://stackoverflow.com/help/whats-reputation) vous pourrez [commenter n'importe quel article] (https://stackoverflow.com/help/privileges/comment); Au lieu de cela, [fournissez des réponses qui ne nécessitent pas de précisions de la part du demandeur] (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- je-fais-à la place). - [De l'avis] (/ review/low-quality-posts/17673638) – Hannu

1

Les déclarations ElseIf jetteront Runtime Error 13 si les cellules ont une valeur non actualisée en eux. Cela est dû en essayant de convertir une valeur non actualisée en une date VBA.CDate(Cells(i, 3))

Private Sub CommandButton1_Click() 
    Dim i As Long 
    With Worksheets("Sheet1") 
     For i = Range("C" & .Rows.Count).End(xlUp).Row To 2 Step -1 'Range upto 5000, chnge this as per your requirment' 

      If IsDate(Cells(i, 3)) Then 
       Select Case VBA.CDate(.Cells(i, 3)) - VBA.Date() 
        Case Is < 0 
         .Cells(i, 3).Interior.Color = vbGreen 
        Case Is = 0 
         .Cells(i, 3).Interior.Color = vbYellow 
        Case Is <= 4 
         .Cells(i, 3).Interior.Color = vbRed 
        Case Is <= 10 
         .Cells(i, 3).Interior.Color = vbCyan 
        Case Else 
         .Cells(i, 3).Interior.ColorIndex = xlNone 
       End Select 

      Else 
       .Cells(i, 3).Interior.ColorIndex = xlNone 
      End If 

      ' your 2nd criteria to color the entire row if "F" is not empty 
      If Trim(.Range("F" & i).Value) <> "" Then .Range("D" & i & ":F" & i).Interior.ColorIndex = 15 
     Next 
    End With 
End Sub