Excel VBA ошибка 1004 при попытке удалить кнопки из диапазона ячеек

Basher спросил: 07 октября 2018 в 12:02 в: excel

У меня проблемы с удалением диапазона ячеек, в которых содержатся командные кнопки ActiveX, так как приведенный ниже код выдаст ошибку 1004 "Ошибка приложения или объекта" в части пересечения при отладке.

Sub DeleteShapes() 
    Dim rng As Range
    Dim sh As Shape
    Set rng = Range("I7:K61")    With Sheets("ADB")
        For Each sh In .Shapes    
            If Not Intersect(sh.TopLeftCell, .Range(rng)) Is Nothing Then
                sh.Delete
            End If
        Next
    End With
End Sub

Лист не заблокирован, и я убедился, что все ячейки в пределах диапазонов также не заблокированы. Слитых ячеек тоже нет. Я пробовал другие комбинации кодов, но это все равно приводит к этой ошибке 1004. Код находится в модуле.

Странная вещь, если я добавляю код, чтобы игнорировать ошибку, он удаляет кнопки без проблем. Однако возникла странная проблема, из-за которой после удаления кнопок раскрывающийся список с проверками данных не отображается. Единственный способ показать это - сохранить рабочую книгу. Удаление кнопок после сохранения снова приводит к исчезновению раскрывающегося списка.

Есть ли какие-либо решения для этого?

РЕДАКТИРОВАТЬ: похоже, что я испытываю какой-то объект "Призрачный выпадающий" с типом 8 на основе кода VBasic2008. Я создал новый лист и попытался скопировать некоторые из старых, затем он снова сохранился. Дальнейшие эксперименты показывают, что он исходит из моих ячеек проверки данных. Тем не менее, как ни странно, удаление проверки данных не удаляет выпадающий объект. Очистка всего листа приводит к тому, что объект все еще сохраняется. Мне пришлось удалить лист, чтобы избавиться от него.

Проверка данных рассматривается как контроль формы? Это не должно быть .. правильно?

РЕДАКТИРОВАТЬ: Как я генерирую свои кнопки

Public Sub GenerateButtons()
 Dim i As Long
 Dim shp As Object
 Dim ILeft As Double
 Dim dblTop As Double
 Dim dblWidth As Double
 Dim dblHeight As Double
 Dim lrow As Long lrow = Cells(Rows.count, 1).End(xlUp).Row With Sheets("ADB")
     ILeft = .Columns("I:I").Left      
     dblWidth = .Columns("I:I").Width    
     For i = 7 To lrow                      
         dblHeight = .Rows(i).Height     
         dblTop = .Rows(i).Top         
         Set shp = .Buttons.Add(ILeft, dblTop, dblWidth, dblHeight)
         shp.OnAction = "Copy1st"
         shp.Characters.Text = "Copy " & .Cells(i, 6).Value
     Next i
 End With End Sub

0 ответов