2017-11-01 3 views
0

Ich habe an einem Makro gearbeitet, Archives: es wählt Zeilen mit dem richtigen Zellenwert aus und verschiebt sie auf eine andere Registerkarte (beim Löschen der Zeilen in der Registerkarte des Ursprungs).Makro wird nicht vollständig ausgeführt

Mein Makro funktionierte einwandfrei, aber ich entschied mich, meine Datei zu ändern und verschiedene neue Registerkarten zu haben. Wenn berechnet ich meine Makro in meiner neuen Tabs, und es funktioniert auf die richtigen Zeilen und löscht sie, aber nicht kopieren Sie sie nicht in meinem „Archiv Reiter“:

Sub Archive_Ongoing() 

Test 2 : works for 2 arguments. 

    Dim xRg As Range 
    Dim xCell As Range 
    Dim I As Long 
    Dim J As Long 
    Dim K As Long 
    I = Worksheets("B90_Projects_OnGoing").UsedRange.Rows.Count 
    J = Worksheets("B90_Projects_Archived").UsedRange.Rows.Count 

    If J = 1 Then 
     If Application.WorksheetFunction.CountA(Worksheets("B90_Projects_Archived").UsedRange) = 0 Then J = 0 
    End If 
    Set xRg = Worksheets("B90_Projects_OnGoing").Range("O1:O" & I) 
    Set yRg = Worksheets("B90_Projects_OnGoing").Range("T1:T" & I) 
    On Error Resume Next 
     Application.ScreenUpdating = False 
    For K = 1 To xRg.Count 
     If CStr(xRg(K).Value) = "Closed" And CStr(yRg(K).Value) <> "" Then 
      xRg(K).Selection.Copy Destination:=Worksheets("B90_Projects_Archived").Range("A" & J + 1) 
      xRg(K).EntireRow.Delete 
      If CStr(xRg(K).Value) = "Closed" Then 
       K = K - 1 
      End If 
      J = J + 1 
     End If 
    Next 
    Application.ScreenUpdating = True 

End Sub' 

Jeder wäre in der Lage zu erklären, warum?

+0

'xRG (K) .Selection.Copy Ziel: = Arbeitsblätter ("B90_Projects_Archived"). Range ("A" & J + 1) 'versucht eine Auswahl zu kopieren und Sie haben nichts in Ihrem Code ausgewählt ... Außer Sie sind es manuell auswählen und dann das Makro ausführen? – Maldred

+3

Entfernen Sie 'On Error Resume Next' und Debuggen Sie Ihren Code Zeile für Zeile, Sie werden sehr schnell ** herausfinden, was Ihr Problem ist. Wenn Sie nicht lösen können, aktualisieren Sie Ihre Frage mit etwas spezifischer (d. H. - Zeile des Fehlers und was Sie versucht haben, Problem zu lösen). Sie müssen auch einen Bereich rückwärts durchlaufen, wenn Sie auch Zeilen aus dem Bereich löschen. –

+0

diese Zeile 'xRg (K) .Selection.Copy ....' löst Fehler 438 aus .... Ihr Code kann daher möglicherweise nicht funktionieren – jsotola

Antwort

0

Weil Sie Ihre K Variable innerhalb der FOR Schleife dekrementieren, die sie auch erhöht. Ihre K-Variable ändert sich nie. Kommentieren Sie K = K - 1 und melden Sie sich zurück?

Wenn Sie das absichtlich tun eine einzige Zeile zu bewerten/löschen und die nächsten Werte verschieben bis dann möchten Sie vielleicht eine K2 Variable haben, die Sie wie folgt erhöhen:

For K = 1 To xRg.Count 
    If CStr(xRg(K - K2).Value) = "Closed" And CStr(yRg(K - K2).Value) <> "" Then 
     xRg(K - K2).Selection.Copy Destination:=Worksheets("B90_Projects_Archived").Range("A" & J + 1) 
     xRg(K - K2).EntireRow.Delete 
     If CStr(xRg(K - K2).Value) = "Closed" Then 
      K2 = K2 + 1 
     End If 
     J = J + 1 
    End If 
Next 
Verwandte Themen