2017-02-12 6 views
0

Ich habe diesen Code verwendet, um nach den in Cell (10,2) geschriebenen Wörtern in verschiedenen Tabellenzeilen in mehreren Blättern in derselben Arbeitsmappe zu suchen, und wenn das Wort, der Code gefunden wurde löscht die gesamte Zeile in jeder Tabelle, das Problem ist, dass der Code im ersten Blatt angewendet wird, wo die Befehlsschaltfläche aktiviert ist und nicht auf andere Blätter angewendet wird, also bitte Ihre Hilfe in diesem.Zeilen löschen basierend auf Kriterien in mehreren Blättern

sub Deletrows_Click() 

Dim WS As Worksheet 
Dim pattern As String 

For Each WS In ThisWorkbook.Worksheets 
    With WS 
     pattern = Cells(10, 2) ' delete row if found the word total in it 
     RowCount = ActiveSheet.UsedRange.Rows.Count 

     Dim i As Integer 
     For i = 2 To RowCount 
      Dim j As Integer 
      For j = 1 To 3 'find the word within this range 
       If Cells(i, j) = pattern Then 
        Cells(i, j).EntireRow.Delete 
       End If 
      Next j 
     Next i 
    End With 
Next WS 

End Sub 
+0

Vielen Dank Shai für Ihre freundliche Unterstützung, hilft es, viel –

Antwort

2

Sie müssen vollständig Ihr Range und Cells in der alle With WS Aussage qualifizieren, indem die . als Präfix hinzufügen.

z. anstelle von pattern = Cells(10, 2) verwenden Sie pattern = .Cells(10, 2), die .Cells(10, 2) bedeutet Zellen (10, 2) von WS, die in Ihrem For Each WS In ThisWorkbook.Worksheets fortgeschritten ist.

-Code

Option Explicit 

Sub Deletrows_Click() 

Dim WS As Worksheet 
Dim pattern As String 
Dim RowCount As Long, i As Long, j As Long 

For Each WS In ThisWorkbook.Worksheets 
    With WS 
     pattern = .Cells(10, 2) ' delete row if found the word total in it 
     RowCount = .UsedRange.Rows.Count 

     For i = 2 To RowCount 
      For j = 1 To 3 'find the word within this range 
       If .Cells(i, j) = pattern Then 
        .Cells(i, j).EntireRow.Delete 
       End If 
      Next j 
     Next i 
    End With 
Next WS 

End Sub 

Option 2: Anstelle der Verwendung von zwei For Loops, man konnte die zweite For Schleife mit der Application.Match Funktion, ersetzen für einen bestimmten Wert in der gesamten Zeile suchen .

Code mit Spiel

Option Explicit 

Sub Deletrows_Click() 

Dim WS As Worksheet 
Dim pattern As String 
Dim RowCount As Long, i As Long, j As Long 

For Each WS In ThisWorkbook.Worksheets 
    With WS 
     pattern = .Cells(10, 2) ' delete row if found the word total in it 
     RowCount = .UsedRange.Rows.Count 

     For i = 2 To RowCount 
      ' use the Match function to find the word inside a certain row 
      If Not IsError(Application.Match(pattern, .Range(.Cells(i, 1), .Cells(i, 3)), 0)) Then '<-- match was successful 
       .Cells(i, 1).EntireRow.Delete 
      End If        
     Next i 
    End With 
Next WS 

End Sub 

Edit 2:

Option Explicit 

Sub Deletrows_Click() 

Dim WS As Worksheet 
Dim pattern As String 
Dim FirstRow As Long, RowCount As Long, i As Long, j As Long 
Dim FirstCol, ColCount As Long 

For Each WS In ThisWorkbook.Worksheets 
    With WS 
     pattern = .Cells(10, 2) ' delete row if found the word total in it 
     FirstRow = .UsedRange.Row 
     RowCount = .UsedRange.Rows.Count 
     FirstCol = .UsedRange.Column 
     ColCount = .UsedRange.Columns.Count 

     For i = 2 To RowCount + FirstRow 
      ' use the Match function to find the word inside a certain row 
      If Not IsError(Application.Match(pattern, .Range(.Cells(i, 1), .Cells(i, ColCount + FirstCol)), 0)) Then '<-- match was successful 
       .Cells(i, 1).EntireRow.Delete 
      End If 
     Next i 
    End With 
Next WS 

End Sub 
+0

zunächst vielen Dank für Ihre freundliche Hilfe. Ich habe versucht, den zweiten Code es funktioniert gut, aber es löschte die übereinstimmenden Wörter in Cells (10,2) nur in allen Blättern und ignoriert andere ähnliche Wörter in anderen Spalten oder Zeilen. um mich besser auszudrücken. sage ich, ich möchte eine Zeile in jedem Blatt löschen, das das Wort Red Apple hat. Würdest du bitte helfen? –

+0

@NabilAmer Sie möchten das Wort 'Cells (10,2)' aus dem ganzen Blatt entfernen? Ursache Ihr Beitrag Sie sehen Spalten A bis C nur –

+0

Hallo Shai, ich habe versucht, die Edit 2 es funktioniert nur, wenn die Zellen (10,2) das erforderliche Wort haben, aber wenn nicht gefunden, wird es nicht auf anderen Blättern arbeiten. Die Zellen (10,2) befinden sich in Blatt1, die ausgeschlossen werden müssen, daher habe ich den folgenden Code hinzugefügt und funktioniert nach Bedarf (Muster = Blätter ("Blatt1"). Zellen (10, 2) und auch dieses (Wenn WS. Name <> "Sheet1" Then). Jetzt funktioniert es gut. Ich habe eine weitere Frage, wenn es sein könnte, wie kann ich Eingabefeld verwenden, ohne mich zu fragen, die Eingabe der erforderlichen Daten zu wiederholen, wie ich diesen Code auch pattern = InputBox ("Bitte geben Sie die ausgewählte ID ein.") –

0
Sub Deletrows_Click() 

Dim WS As Worksheet 
Dim pattern As String 
Dim FirstRow As Long, RowCount As Long, i As Long, j As Long 
Dim FirstCol, ColCount As Long 

For Each WS In ThisWorkbook.Worksheets 
    With WS 
     pattern = Sheets("Sheet1").Cells(10, 2) ' delete row if found the word in this source sheet 
     FirstRow = .UsedRange.Row 
     RowCount = .UsedRange.Rows.Count 
     FirstCol = .UsedRange.Column 
     ColCount = .UsedRange.Columns.Count 

     For i = 2 To RowCount + FirstRow 
      ' use the Match function to find the word inside a certain row 
      If WS.Name <> "Sheet1" Then 'I added this to exclude the said sheet as a source page 
      If Not IsError(Application.Match(pattern, .Range(.Cells(i, 1), .Cells(i, ColCount + FirstCol)), 0)) Then '<-- match was successful 
      .Cells(i, 1).EntireRow.Delete 
      End If 
      End If 
     Next i 
    End With 
Next WS 

End Sub 
Verwandte Themen