删除一组VBAbutton

我使用下面的脚本来生成Excel中的button,范围正是我想要放置的位置。

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" End With End With End Sub 

唯一的问题是,我想要一个方法,可以删除这个方法产生的所有button? 如果可能的话,我想避开全局variables。 任何帮助将受到感谢。 詹姆士

我build议蒂姆的方法使用一个特定的名称 – 这不需要一个全局variables。 例如,您可以为每个button名称添加一个“_ || ForDeletion”后缀,然后在删除例程中查找它

  .Name = "Add_||ForDeletion" 

Formsbutton确实提供了另一种替代方法(不是双关语),您可以将文本存储在“属性”和“Web”下的AlternativeText ,并将其用作删除例程的标识符。

底部的删除例程向后工作,以避免在循环范围时出错

在这里输入图像说明

 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 

VBA中的button位于Shapes集合中。 您可以使用:

 Sub deleteButtons() Dim btn As Shape For Each btn In ActiveSheet.Shapes If btn.AutoShapeType = msoShapeStyleMixed Then btn.Delete Next End Sub 

msoShapeStyleMixed似乎是所有窗体和ActiveX控件的types。