2017-10-09 2 views
0

J'ai un code VBA qui permet à l'utilisateur d'entrer une date ET COMPARER la date entrée avec le courant afin de remplir la cellule dans la couleur appropriée, j'utilise le Sélectionnez l'énoncé de cas.Code VBA qui compare les données actuelles + 10 jours en utilisant l'instruction de cas

Je dois faire en sorte que la cellule se remplisse en rouge. L'utilisateur doit entrer une date qui est le jour actuel + 10 jours.

comment le faire?

Code

Private Sub CommandButton1_Click() 

Dim i As Integer 
Dim objDate As Date 


MsgBox (objDate) 

For i = Range("C5000").End(xlUp).Row To 2 Step -1 'Range upto 5000, chnge this as per your requirment' 

    objDate = Date 

    Select Case VBA.CDate(Cells(i, 3)) 

    Case IsEmpty(i) 
     Cells(i, 3).Interior.ColorIndex = 0 

    Case Is < VBA.Date() 
     Cells(i, 3).Interior.Color = vbGreen 

    Case Is = VBA.Date() 
     Cells(i, 3).Interior.Color = vbYellow 

    Case Is > VBA.Date() 
     Cells(i, 3).Interior.Color = vbRed 


    End Select 
Next 

End Sub 
+0

Pourquoi avez-vous un 'MsgBox' juste après la déclaration ation? Il ne contiendra aucune valeur. Les dates et les nombres sont initialisés avec 0. Donc, ça va juste afficher 00:00:00. Et quel est le but de 'objDate'. Vous ne l'utilisez nulle part dans le code. Cela ne fait qu'ajouter à la surcharge, car vous lui attribuez la même valeur dans votre boucle. – Mahesh

Répondre

0

Voici une autre façon d'y parvenir. Faites la différence entre les deux dates comme expression de test, puis vérifiez chaque cas (c'est-à-dire, s'il est inférieur à 0, égal à celui-ci ou si la différence est supérieure à 10).

If IsEmpty(Cells(i, 3)) Then Exit Sub 
Select Case (VBA.CDate(Cells(i, 3)) - VBA.Date()) 
    Case Is < 0 
     Cells(i, 3).Interior.Color = vbGreen 
    Case 0 
     Cells(i, 3).Interior.Color = vbYellow 
    Case Is > 10 
     Cells(i, 3).Interior.Color = vbRed 
    Case Else 
     'Colour to be applied if the difference is between 1 and 10 (both inclusive) 
End Select 

En outre, votre test de IsEmpty ne fonctionnera pas comme vous avez l'intention, parce que vous vérifiez si le i (le compteur) est vide ou non. Il reviendra toujours False. De plus, les cellules ont déjà un ColorIndex de 0. Donc, à moins que votre code ne vérifie si des cellules non vides auparavant sont vides, la partie Cells(i, 3).Interior.ColorIndex = 0 est inutile.

Mise à jour:

Comme une expérience amusante, je l'ai essayé pour voir comment les résultats levant les yeux, et voici la capture d'écran:

Macro in action

PS: Depuis l'OP didn ne mentionne pas la couleur pour quand la différence était entre 1 et 10, j'ai coloré ces cellules en noir: -P