删除一组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"
“ Forms
button确实提供了另一种替代方法(不是双关语),您可以将文本存储在“属性”和“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。