删除VBA按钮集合

4
我正在使用以下脚本在Excel中生成按钮,该范围只是我想要放置的位置。
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

唯一的问题是,我想要一种方法来删除这个方法生成的所有按钮?如果可能的话,我想避免使用全局变量。非常感谢您的帮助。 詹姆斯


3
您可以通过在按钮名称中使用特定的前缀或后缀来为所有按钮打标签:然后,您可以循环遍历工作表上的所有按钮,并删除名称包含该前缀/后缀的任何按钮。 - Tim Williams
我必须使用某种全局变量来实现这个,但我正在努力摆脱所有的全局变量,因为如果 Excel 中出现错误,它们会失去其值。 - James
你为什么需要一个全局变量来做那件事呢?其实不需要!(除非你把整个Excel实例都算作全局变量...)可以看看@brettdj的实现。 - Jean-François Corbett
2个回答

4
我建议使用Tim的方法,他使用了一个具体的名称,不需要全局变量。例如,你可以给每个按钮名称添加"_||ForDeletion"后缀,然后在删除程序中查找它。
 .Name = "Add_||ForDeletion"

一个表单按钮提供了另一种选择(无意冒犯),您可以将文本字符串存储在“属性”下的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

0

VBA中的按钮位于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 控件的类型。


那太好了,但是有一些按钮我需要保留在页面上。我认为我能够识别我想要删除的按钮的唯一方法是通过名称或标题属性。 - James

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接