2016-06-26 5 views
0

Ich habe ein Makro, aber es löscht die Zeilen, die ich behalten möchte, basierend auf einer Nummer (die Nummer der Zeile), die es behalten muss ein anderes Blatt, aber alles, was ich versuche, verschiebt einfach die letzte Übereinstimmung oder löscht jede Zeile, die ich behalten möchte. What happensMakro löscht, was ich behalten möchte

Sub KeepRows() 
    Dim x As Range, u As Range 
    Dim y As String 

    With Sheets("Sheetwithnumberrow") 
     Set x = .Range(.Cells(2, "H"), .Cells(Rows.Count, "H").End(xlUp)) 
    End With 

    For Each u In x 
     If u.Text = "keep row" Then 
      Sheets("SheetthatIwannaClean").Select 
      y = u.Offset(0, -1) 
      Rows(y).ClearContents 
     End If 
    Next 
End Sub 

EDIT: Ich habe das Bild von dem, was passiert ist, habe ich versucht, auf ein anderes Blatt zu bewegen, anstatt den Inhalt der Reinigung, dem Bus nur die letzte Zeile bewegen.

Product ROW Instruction ROW Instruction 
1   6 keep row 6 keep row 
2   15 keep row 15 keep row 
3   18 Try Next 17 keep row 
4   24 keep row 24 keep row 
5   28 keep row 28 keep row 

Die Logik es ist wie thig, geht es an der Reihe, wenn die Anweisung zu halten ist, zu halten hat, und zur nächsten Zeile gehen. Aber das Problem ist, dass der Code die Zeile löscht.

+0

Sieht aus wie ein Tippfehler. Versuchen Sie 'For Each u In x' anstelle von' For Each c In x'. Wenn Sie vor dem Subsystem die Option Explicit angeben, ist es wahrscheinlicher, dass Sie solche Fehler selbst bemerken. Ändere auch 'Sheets (" Sheet thatIwannaClean "). Wähle' to 'Sheets (" Sheet thatIwannaClean "). Activate' (Du kannst diese Zeile jedoch komplett entfernen). – Ralph

+0

Oh, Entschuldigung, ich habe den Fehler gemacht, hier zu schreiben, im Code es U. – Yoshio

+1

Wenn du die Zeile behalten willst, dann ändere die Bedingung: 'Wenn du Text <>" Zeile behalten "Dann? – trincot

Antwort

0
Sub KeepRows() 
    Dim x As Range, u As Range 
    Dim y As String 

    With Sheets("Sheetwithnumberrow") 
     Set x = .Range(.Cells(2, "H"), .Cells(.Rows.Count, "H").End(xlUp)) 
    End With 

    For Each u In x 
     If u.Text <> "keep row" Then Sheets("SheetthatIwannaClean").Rows(u.Offset(0, -1)).EntireRow.ClearContents 
    Next u 
End Sub 
Verwandte Themen