Excel: «Ошибка времени выполнения -2147417848 (80010108)» Метод «Удалить» объекта «Диапазон» не выполнен - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть макрос, который удаляет выбранную строку таблицы на защищенном листе в Excel, и я получаю сообщение об ошибке в заголовке при каждом запуске кода. Эта проблема возникла, когда я ввел 10 правил условного формата на лист, и если я очистил лист от любых условных форматов, я смогу удалить столько строк, сколько мне нужно. Мой код для удаления строки таблицы ниже, а также, куда указывает отладка, чтобы очистить ошибку.

Sub DeleteRow()

    Application.EnableEvents = False    
    Application.ScreenUpdating = False
    Sheet1.Unprotect Password:="Password!"
    Dim rng As Range    
    On Error Resume Next
    With Selection.Cells(1)
        Set rng = Intersect(.EntireRow, ActiveCell.ListObject.DataBodyRange)
        On Error GoTo 0
        If rng Is Nothing Then
            MsgBox "Please select a valid table cell.", vbCritical
        Else
            rng.Delete xlShiftUp   'This is the line where the debug is pointing to
        End If
    End With
    Sheet1.Protect Password:="Password!"
    Application.EnableEvents = True

End Sub

Спасибо за вашу помощь!

* Обновление № # Ref! ошибки в любой из моих формул условного формата. ** Обновление У меня есть около 10 формул условного формата, с небольшими изменениями ниже.

=AND(COUNTIFS($E$14:$E$17,$E14,$J$14:$J$17,"Black")>1,$J14="Black")
=AND(COUNTIFS($E$14:$E$17,$E14,$J$14:$J$17,"White")>1,$J14="White")
=AND(COUNTIFS($E$14:$E$17,$E14,$J$14:$J$17,"Green")>1,$J14="Green")

1 Ответ

0 голосов
/ 30 апреля 2018

Скорее всего, условное форматирование где-то имеет ошибку # REF! , поэтому Excel не разрешает удаление. Чтобы увидеть все формулы в условных форматах, запустите:

Sub ListAllConditionalFormat()

    Dim cf      As FormatCondition
    Dim ws      As Worksheet
    Dim l       As Long
    Dim rngCell As Range

    On Error Resume Next

    Application.EnableEvents = False
    Application.ScreenUpdating = False
    Worksheets("Report").Cells.Clear

    For Each ws In ThisWorkbook.Worksheets
        Debug.Print ws.Name

        For Each cf In ws.Cells.FormatConditions
            l = 1 + l
            With Worksheets("Report")
                Set rngCell = .Cells(l, 1)
                rngCell = cf.AppliesTo.Address
                rngCell.Offset(0, 1) = cf.Type
                rngCell.Offset(0, 2) = "'" & cf.Formula1
                rngCell.Offset(0, 3) = cf.Interior.Color
                rngCell.Offset(0, 4) = cf.Font.Name
                rngCell.Offset(0, 5) = ws.Name
                rngCell.Offset(0, 6) = "'" & cf.AppliesTo.AddressLocal
                rngCell.Offset(0, 7) = "'" & cf.Formula2
            End With
        Next cf
    Next ws
    Debug.Print "END!"

End Sub

Просто убедитесь, что у вас есть лист с именем Report, где все пусто. Информация для условных форматов будет там. Найдите ошибки # REF! и исправьте их, как только увидите.

...