2016-11-24 4 views
0

ich mit Ihrer Hilfe benötigen:wenn leer stoppt die Schleife nicht

Spalte J (Endtermin)

Spalte G (DUE DATE)

COLUMN M (zeigt: früh, pünktlich oder Verzögerung)

  • wenn J blank ich die Schleife stoppen wollen
  • es nicht mit meinem Code unten und alle Zellen in J Spalte sind immer gefüllt
  • D-Wert ist immer 0 (ich bin immer alles so rechtzeitig in Spalte M)

HINWEIS: Wenn ich für eine Zelle statt Bereich versucht haben, es funktioniert richtig

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

Versuchen 'Wenn C.Value = "" oder C.Value = "0" oder C.Value = "" Dann Exit For "aber ich denke, was Sie wollen, ist' Wenn C.Value = "" oder C.Value = "0" oder C.Value = "" Dann Gehe zu Next_Element "und rufe Write _Next_Element: _ kurz vor dem _Next_ deiner Haupt _For Each_ Schleife auf – Seb

+1

isempty (C) oder C = vbNullString – Lowpar

+0

danke, ich werde es versuchen –

Antwort

0

Sie nach so etwas wie dies auch sein mag:

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

Hallo, danke, ich habe versucht, den obigen Code, es bleibt Schleife und Excel bleibt ohne Ergebnis, ich musste es stoppen, dann hob es die Zeile mit NEXT am Ende. –

+0

hinweis: werte in J und G sind daten (wenn dies einen unterschied macht), danke im voraus. –

+0

keine Möglichkeit, es kann endlos durchlaufen, da es nur alle "Zahlen" in Spalte "J" durchläuft. Da Sie sagen, dass "Excel weiter berechnet", würde ich argumentieren, dass in anderen als den vom Code berührten Zellen (d. H. Der Spalte "M") eine Menge an Arbeitsblattberechnung stattfindet. Sie können dann versuchen, 'Application.Calculation = xlCalculationManual' vor' With Sheet1' und 'Application.Calculation = xlCalculationAutomatic' direkt nach' End With' hinzuzufügen. – user3598756

Verwandte Themen