У меня возникли проблемы с удалением диапазона ячеек, в которых содержатся командные кнопки 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