2015-03-05 8 views
0

У меня проблема с моим кодом. Я пытаюсь отфильтровать диапазон, чтобы исключить строки, где в столбце K значение равно «Марту» и удалять эти строки. Таким образом, будут отображаться все строки, кроме «Мартовских». Код работает до момента, когда он пытается удалить. .Offset(1, 0).SpecialCells.... Это дает мне время выполнения ошибки 1004Ошибка времени выполнения '1004'? Excel VBA

Public Sub RemoveRows() 

Dim ws As Worksheet 
Dim strSearch As String 
Dim lRow As Long 

strSearch = "March" 

Set ws = Sheets("January") 

With ws 
    lRow = .Range("B" & .Rows.Count).End(xlUp).Row 

    '~~> Remove any filters 
    .AutoFilterMode = False 

    '~~> Filter, offset(to exclude headers) and delete visible rows 
    With .Range("K1:K" & lRow) 
.AutoFilter Field:=1, Criteria1:="=*" & strSearch & "*" 
     .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete 

    End With 

    '~~> Remove any filters 
    .AutoFilterMode = False 
End With 
End Sub 

ответ

0

Вам не нужно искать .SpecialCells(xlCellTypeVisible). Просто смещайте одну строку, чтобы сохранить заголовок и удалить.

.Offset(1, 0).EntireRow.Delete 

Только видимые строки .AutoFilter будут удалены. Вы можете проверить наличие строк, чтобы удалить с Application.Subtotal(103, ...) как пытаться удалить строки, когда нет какой-либо удалить, может привести в обход .AutoFilter и удаление всех данных ..

1

Вы должны поместить точки в выписках Диапазон:

Public Sub RemoveRows() 

Dim ws As Worksheet 
Dim strSearch As String 
Dim lRow As Long 

strSearch = "March" 
Set ws = Sheets("January") 

With ws 
     lRow = .Range("B" & .Rows.Count).End(xlUp).Row 

    '~~> Remove any filters 

     .AutoFilterMode = False 

    '~~> Filter, offset(to exclude headers) and delete visible rows 

     .Range("K1:K" & lRow).AutoFilter Field:=1, Criteria1:=strSearch 
     .Range("K2:K" & lRow).Cells.SpecialCells(xlCellTypeVisible).EntireRow.Delete 

    '~~> Remove any filters 

    .AutoFilterMode = False 
End With 
End Sub 

и .offset() не требуется, просто запустите на K2;
внутренний С заявление не требуется.

Смежные вопросы