删除VBA按钮的集合

时间:2012-01-17 17:25:18

标签: excel excel-vba vba

我正在使用以下脚本在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

唯一的问题是,我想要一个可以删除此方法生成的所有按钮的方法吗?如果可能的话,我想避开全局变量。我们将非常感激地提供任何帮助。 詹姆斯

2 个答案:

答案 0 :(得分:4)

我建议Tim使用特定名称的方法 - 它不需要全局变量。例如,你可以添加一个 " _ || ForDeletion" 后缀为每个按钮名称,然后在删除例程中查找

 .Name = "Add_||ForDeletion"

Forms按钮确实提供了另一种选择(没有双关语),您可以在AlternativeText下的"属性"中存储文本刺痛。然后" Web"并将其用作删除例程的标识符。

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

enter image description here

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

答案 1 :(得分: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似乎是所有Form和ActiveX控件的类型。