2016-11-24 1 views
0

je besoin de votre aide:si vide ne s'arrête la boucle

COLONNE J (DATE D'ACHÈVEMENT)

COLONNE G (ÉCHÉANCE)

COLONNE M (AFFICHE: début, à l'heure ou retard)

  • lorsque J est vide Je veux la boucle pour arrêter
  • il n'a pas avec mon code ci-dessous et toutes les cellules de la colonne J sont se remplir
  • valeur D est toujours 0 (je reçois tout comme le temps dans la colonne M)

NOTE: quand je l'ai essayé pour une cellule à la place de la gamme fonctionne correctement

Sub TIMESTATUS() 
    Dim CompletionDate As Long 
    Dim DueDate As Long 
    Dim D As Boolean 

    For Each C In Sheet1.Range("j:j") 
     If C.Value = "" Then 
      Exit For 
     Else 
      For Each g In Sheet1.Range("g:g") 
       CompletionDate = C.Value 
       DueDate = g.Value 
       D = CompletionDate - DueDate 
       If D > 0 Then 
        Range("m:m").Value = "Delay" 
       ElseIf D < 0 Then 
        Range("m:m").Value = "Early" 
       ElseIf D = 0 Then 
        Range("m:m").Value = "On Time" 
       End If 
      Next 
     End If 
    Next 
End Sub 
+0

Essayez 'Si C.Value = "" ou C.Value = "0" ou C.Value = "" Alors Quittez For' mais je suppose que ce que vous voulez est 'Si C.Value =" "ou C.Value =" 0 "ou C.Value = "" Puis Goto Next_Element' et appelez write _Next_Element: _ juste avant le _Next_ de votre boucle principale _For Each_ – Seb

+1

isempty (C) ou C = vbNullString – Lowpar

+0

merci, je vais l'essayer –

Répondre

0

vous est peut-être après quelque chose comme ceci:

Sub TIMESTATUS()   
    Dim C As Range 
    Dim strng As String 

    With Sheet1 '<--| reference your sheet 
     For Each C In .Range("J:J").SpecialCells(xlCellTypeConstants, xlNumbers) '<--| loop through its column J not empty cells with numbers only 
      Select Case C.Value - .Cells(C.row, "G").Value '<--| check the difference between curent column "J" cell and its corresponding one i column "G" against following cases 
       Case Is > 0 '<--| if difference >0 
        strng = "Delay" 
       Case Is < 0 '<--| if difference <0 
        strng = "Early" 
       Case Else '<--| esle (i.e. if difference =0) 
        strng = "On Time" 
      End Select 
      .Cells(C.row, "M").Value = strng '<--| write down the value 
     Next 
    End With 
End Sub 
+0

Salut, merci, j'ai essayé le code ci-dessus, ça tient en boucle et Excel continue de calculer sans résultat, j'ai dû l'arrêter puis il a mis en surbrillance la ligne avec NEXT à la fin. –

+0

note: les valeurs en J et G sont des dates (si cela fait une différence), merci d'avance. –

+0

ne peut en aucun cas boucler car il passe par tous les "nombres" dans la colonne "J" seulement. Puisque vous dites "Excel continue de calculer", je dirais qu'il y a beaucoup de calcul de feuille de calcul dans les cellules autres que celles touchées par le code (c'est-à-dire la colonne "M"). Vous pouvez ensuite essayer d'ajouter 'Application.Calculation = xlCalculationManual' avant' avec Sheet1' et 'Application.Calculation = xlCalculationAutomatic' juste après' End With'. – user3598756

0

En votre code D est booléen. Cela signifie qu'il a deux valeurs - True ou False. Ainsi, le code comme: If D > 0 ThenElseIf D < 0 ThenElseIf D = 0 Then n'a pas de sens ... Vous pouvez en savoir plus pour les valeurs booléennes ici: https://msdn.microsoft.com/en-us/library/wts33hb3.aspx

+0

merci Vity ata –