2016-10-25 5 views
0

Код предназначен для удаления заголовков столбцов (после импорта нескольких файлов) для данных. Но я получаю сообщение об ошибке: «1004» Что такое «Определенная приложением или объектная ошибка». Я ссылался на различные решения по SO, но безрезультатно.Удалить строку на основе значения ячейки

Перед тем, как запустить этот снимок кода, я удаляю пустые строки и включаю это, чтобы показать, что работает, и может даже держать ключ.

'Remove all rows with blanks first 
Set wb = Workbooks(ThisWorkbook.Name) 
'Remove blank rows based on if column 'B' is blank as a and B are filled when there is risk key showing 
wb.Worksheets("BatchData").Activate 
Columns("B:B").SpecialCells(xlCellTypeBlanks).EntireRow.Delete 
'Now to delete based on column headers! 
Dim LastRow As Long 
LastRow = Cells(Rows.Count, 1).End(xlUp).Row 
'Filter Column A and delete selection 
'############# Error line below 
ActiveSheet.Range("A1:" & A & ":" & LastRow).AutoFilter Field:=2, Criteria1:= _ 
     "=Item", Operator:=xlOr, Criteria2:="=" 
Selection.EntireRow.Delete 

EDIT:

Измененный код, некоторые твики, как в комментариях, а также у меня было поле "2" ссылка и пытается использовать 'A', который является 1.

Dim LastRow As Long 
LastRow = wb.Worksheets("BatchData").Cells(Rows.Count, 1).End(xlUp).Row 
'Filter Column A and delete selection 
ActiveSheet.Range("A1:A" & LastRow).AutoFilter Field:=1, Criteria1:= _ 
     "=Item", Operator:=xlOr, Criteria2:="=" 

ActiveSheet .Range ("$ A $ 1: $ A $" & LastRow) .offset (0, 0) .SpecialCells _ (xlCellTypeVisible) .EntireRow.Delete

Последняя строка редактирования на основе; VBA: How to delete filtered rows in Excel?, но смещение изменено с 1,0 до 0,0

+1

Сначала вы можете использовать 'Set wb = ThisWorkbook'. Во-вторых, при использовании 'LastRow' лучше использовать определенную ссылку на лист, например' LastRow = wb.Worksheets («BatchData»). Ячейки (Rows.Count, 1) .End (xlUp) .Row'. Кроме того, измените «Range (« A1: »& A &»: «& LastRow)' на 'Range (« A1: A »и LastRow)' –

+0

У меня есть подозрение ... Сделайте отпечаток '" A1: " & A & ":" & LastRow' и добавьте его в свой пост. – FDavidov

+0

Кстати, вы удаляете диапазон внутри столбца/строки, а не весь столбец/строку. – FDavidov

ответ

1

Попытка немного очистить ваш код и устранить возможные ошибки, попробуйте код ниже, он фильтрует столбцы A для «Item», затем вы можете использовать один из 2 вариантов:

Вариант 1: удалить все строки, включая строку заголовка.

Вариант 2: удалить все строки, кроме строки заголовка.

Option Explicit 

Sub DeleteFilteredRows() 

Dim LastRow As Long 

With ThisWorkbook.Worksheets("BatchData") 

    ' remove blank rows based on if column 'B' is blank as a and B are filled when there is risk key 
    .Columns("B:B").SpecialCells(xlCellTypeBlanks).EntireRow.Delete 

    ' find last row in Column ! 
    LastRow = .Cells(Rows.Count, 1).End(xlUp).Row 

    ' Filter Column A 
    .Range("A1:A" & LastRow).AutoFilter Field:=1, Criteria1:= _ 
      "=Item", Operator:=xlOr, Criteria2:="=" 

    ' option 1: delete also header row 
    .Range("A1:A" & LastRow).SpecialCells _ 
     (xlCellTypeVisible).EntireRow.Delete 

    ' option 2: if you want to keep the header row 
    .Range("A1:A" & LastRow).Offset(1, 0).SpecialCells _ 
     (xlCellTypeVisible).EntireRow.Delete 

End With 

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