Я бы предложил метод Тима, использующий конкретное имя, которому не нужна глобальная переменная. Например, вы можете добавить
"_ || ForDeletion" суффикс к каждому имени кнопки и затем искать его в подпрограмме удаления
.Name = "Add_||ForDeletion"
Кнопка Forms
предоставляет другую альтернативу, хотя (без каламбура) вы можете сохранить текстовую строку в AlternativeText
в «Свойствах», затем «Веб» и использовать ее в качестве идентификатора для процедуры удаления.
Процедура удаления внизу работает в обратном направлении, чтобы избежать ошибок при циклическом переключении диапазона
![enter image description here](https://i.stack.imgur.com/5TPeC.png)
Sub TesMe()
Call CreateAddButton([a2])
End Sub
Sub CreateAddButton(rng As Range)
Dim btn As Button
With Worksheets("User")
Set btn = .Buttons.Add(rng.Left, rng.Top, rng.Width, rng.Height)
With btn
.Name = "Add"
.Caption = "Add Column"
.OnAction = "CreateVariable"
.ShapeRange.AlternativeText = "MyCollection"
End With
End With
End Sub
Sub GetMyButtons()
Dim btns As Object
Dim lngRow As Long
Set btns = Sheets("User").Buttons
For lngRow = btns.Count To 1 Step -1
If btns(lngRow).ShapeRange.AlternativeText = "MyCollection" Then
MsgBox "Found one", vbCritical
btns(lngRow).Delete
End If
Next
End Sub