2017-02-12 2 views
0

Я использовал этот код для поиска слов, записанных в ячейке (10,2) в разных строках таблицы в нескольких листах в одной книге, и когда нашел слово, код будет удалять всю строку в каждой таблице, проблема в том, что код применяется в первом листе, где кнопка команды включена и не применяется на других листах, поэтому, пожалуйста, помогите в этом.удалять строки на основе критериев в нескольких листах

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

Большое спасибо Шай за ваше любезное помощь, это очень помогает –

ответ

2

Вы должны полностью квалифицировать все ваши Range и Cells внутри With WS заявлении, путем добавления . в качестве префикса.

E.g. вместо pattern = Cells(10, 2) использовать pattern = .Cells(10, 2), .Cells(10, 2) означает Cells (10, 2) of WS, который продвигается в вашем For Each WS In ThisWorkbook.Worksheets.

Код

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 

Вариант 2: Вместо использования двух For петель, вы можете заменить 2-й For цикл с функцией Application.Match, искать определенное значение на протяжении ряда ,

Код с матча

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

во-первых, спасибо за ваша любезная помощь. Я попробовал второй код, который хорошо работает, но удалил совпадающие слова в ячейках (10,2) только на всех листах и ​​игнорировал любые другие подобные слова в других столбцах или строках. чтобы выразить себя лучше. Я хочу удалить любую строку на любых листах, содержащих слово Red Apple. так что, пожалуйста, помогите? –

+0

@NabilAmer вы хотите удалить слово, найденное в 'Cells (10,2)' со всего листа? потому что ваше сообщение вы просматриваете только столбцы от A до C. –

+0

Привет, Shai, я попробовал Edit 2, он работает только в том случае, если Cells (10,2) имеют требуемое слово, но если его не обнаружено, он не будет работать на других листах. ячейки (10,2) находятся в листе1, который необходимо исключить, поэтому я добавил следующий код и работает по мере необходимости (pattern = Sheets («Sheet1»). Ячейки (10, 2), а также это (если WS. Name <> "Sheet1" Then), теперь он работает хорошо. У меня есть еще один вопрос, если это возможно, как я могу использовать поле ввода, не прося меня повторять запись необходимых данных, поскольку я использовал этот код также pattern = InputBox («Пожалуйста, введите выбранный идентификатор».) –

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 
Смежные вопросы