我正在使用以下脚本在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
唯一的问题是,我想要一个可以删除此方法生成的所有按钮的方法吗?如果可能的话,我想避开全局变量。我们将非常感激地提供任何帮助。 詹姆斯
答案 0 :(得分:4)
我建议Tim使用特定名称的方法 - 它不需要全局变量。例如,你可以添加一个 " _ || ForDeletion" 后缀为每个按钮名称,然后在删除例程中查找
.Name = "Add_||ForDeletion"
Forms
按钮确实提供了另一种选择(没有双关语),您可以在AlternativeText
下的"属性"中存储文本刺痛。然后" Web"并将其用作删除例程的标识符。
底部的删除例程向后工作,以避免在循环范围时出错
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控件的类型。