2017-09-07 2 views
0

Ich wollte ein Excel-Makro schreiben, das geht durch K1 ---> K (Lastrow) und sucht nach dem Wert "OptedOut", und wenn es diesen Wert findet, löscht es diese Zeile . Ich schätze die Hilfe Jungs. Der einzige Teil, der falsch ist, ist der For Each C-Teil, weil ich Arrays nicht verstehe, und möglicherweise "c.Value =" OptedOut "Dann zog Rows (c) .Delete" das aus meinem Arsch.Excel VBA Löschen Zeile basierend auf Spalte Wert

Vielen Dank!

Sub DuplicateDelete() 
Sheets("ALL CLIENTS").Range("A1:J10000").Copy Destination:=Sheets("ClientsAndEmailsThatAreOK").Range("A1:J10000") 

With ActiveSheet 
    LastRow = .Cells(.Rows.Count, "K").End(xlUp).Row 
    MsgBox LastRow 
End With 


'Dim c As Range 
For Each c In Range(Range(Cells("K1"), Cells(LastRow, "K"))) 
    If c.Value = "OptedOut" Then Rows(c).Delete 
Next c 


End Sub 
+0

Ist dieser Code annehmen, mit Blatt "alle Clients" oder "ClientsAndEmailsThatAreOK" wrok? –

Antwort

2

Schleife rückwärts beim Löschen von Zeilen (oder anderen Objekten).

Auch statt ActiveSheet versuchen, Ihr Worksheet Objekt, wie Sheets("ClientsAndEmailsThatAreOK") vollständig zu qualifizieren.

Versuchen Sie den Code unten, Erklärung innerhalb der Kommentare Code:

Option Explicit 

Sub DuplicateDelete() 

Dim C As Range 
Dim i As Long, LastRow As Long 

Sheets("ALL CLIENTS").Range("A1:J10000").Copy Destination:=Sheets("ClientsAndEmailsThatAreOK").Range("A1:J10000") 

' I'm assuming you want to work with sheet "ClientsAndEmailsThatAreOK" (if not then switch it) 
With Sheets("ClientsAndEmailsThatAreOK") 
    LastRow = .Cells(.Rows.Count, "K").End(xlUp).Row 
    MsgBox LastRow 

    ' always loop backwards when deleting rows 
    For i = LastRow To 1 Step -1 
     If .Range("K" & i).Value2 = "OptedOut" Then .Rows(i).Delete 
    Next i 
End With 

End Sub 
Verwandte Themen