Я пытаюсь перебрать все ячейки в указанном столбце используемого диапазона и удалить все строки, где значение равно значению другого значения, указанного в переменной. Тем не менее, каждый раз, когда я пытаюсь использовать некоторые варианты .EntireRow.Delete я получаю сообщение об ошибке:

Ошибка времени выполнения «1004»: сбой при удалении метода класса Range

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

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

Dim rngColumnRef As String
    rngColumnRef = "$A:$A"
Dim rngDeleteValue As String
    rngDeleteValue = "X"
    Set tempRange = ActiveSheet.UsedRange.Columns(rngColumnRef)
    For i = 1 To tempRange.Rows.Count
        If ActiveCell.Value = rngDeleteValue Then
            ActiveCell.EntireRow.Delete 'this is where I get the error
        Else
            ActiveCell.Offset(1, 0).Activate
        End If
    Next i
0
Jon Rose 4 Апр 2017 в 22:26

2 ответа

Лучший ответ

Похоже, у меня была таблица (или ListObject) на листе, которая не была преобразована в диапазон. Поскольку таблица была частью строки, которую я пытался удалить, она просто не позволяла мне это сделать. Вот модифицированный код (или дополнительный код), который я использовал, чтобы исправить это:

'New Code

   Dim TableRange as ListObject 'Ideally I would place all my declarations 
                             'up here, but I wanted to show a very
                             'clear, Before and After picture of the code.

   For Each TableRange in ActiveSheet.ListObjects    
       TableRange.Unlist
   Next TableRange

'End of New Code    

Dim rngColumnRef As String
    rngColumnRef = "$A:$A"
Dim rngDeleteValue As String
    rngDeleteValue = "X"
    Set tempRange = ActiveSheet.UsedRange.Columns(rngColumnRef)
    For i = 1 To tempRange.Rows.Count
        If ActiveCell.Value = rngDeleteValue Then
            ActiveCell.EntireRow.Delete 'this is where I got the error
        Else
            ActiveCell.Offset(1, 0).Activate
        End If
    Next i
0
Jon Rose 4 Апр 2017 в 22:54
Dim rngColumnRef As String
    rngColumnRef = "$A:$A"
Dim rngDeleteValue As String
    rngDeleteValue = "X"
    Set tempRange = ActiveSheet.UsedRange.Columns(rngColumnRef)
    For i = 1 To tempRange.Rows.Count
        If ActiveCell.Value = rngDeleteValue Then
            rows(i).EntireRow.Delete 'this is where I get the error
        Else
            ActiveCell.Offset(1, 0).Activate
        End If
    Next i
0
Lowpar 4 Апр 2017 в 21:06