Excel 使用VBA删除每张图纸中的按钮

Excel 使用VBA删除每张图纸中的按钮,excel,vba,Excel,Vba,我使用以下VBA在每张图纸中插入一个按钮: Sub Insert_Button_in_each_sheet() Dim b As Worksheet For Each b In Worksheets b.Select Dim Button_01 As Button Set Button_01 = b.Buttons.Add(423.75, 0, 48, 15) Set Range_Button_01 = b.Range("B1:C5") Selection

我使用以下VBA在每张图纸中插入一个按钮:

Sub Insert_Button_in_each_sheet()
Dim b As Worksheet
For Each b In Worksheets
    b.Select
    Dim Button_01 As Button
    Set Button_01 = b.Buttons.Add(423.75, 0, 48, 15)
    Set Range_Button_01 = b.Range("B1:C5")
    Selection.Name = "Button_01"
    With Button_01
    .Top = Range_Button_01.Top
    .Left = Range_Button_01.Left
    .Width = Range_Button_01.Width
    .Height = Range_Button_01.Height
    .Text = "Button_01"
    End With
Next b
End Sub
这一切都很好

现在,我想使用以下VBA删除每张图纸中的此按钮:

Sub Delete_Existing_Button()
Dim b As Worksheet
For Each b In Worksheets
    b.Select
    b.Shapes("Button_01").Delete
Next b
End Sub
然而,当我运行这段代码时,我得到运行时错误5

我需要在代码中更改什么才能使其正常工作?

选项A:在插入代码中添加以下行:

选项B:将删除代码更改为以下内容:

For Each b In Worksheets
    b.buttons.Delete
    'or
    'b.buttons(1).delete
Next b

尝试将Button_01.Name=Button_01添加到插入代码中。看看删除代码是否有效,然后是什么让你认为你的按钮有这个名称?SelectionName=。。。永远不要出于正当理由使用selectionexcept,因为它们非常罕见您命名的是工作表而不是按钮。这就是为什么应该避免使用.select和.selection,而是使用对对象的显式引用。此外,如果希望代码保持一致,因为在第一个子部分中使用了.buttons集合,那么在第二个子部分中也应该使用它,而不是使用.shapes集合。这两种方法都可以,但为了保持一致性,我只使用两种方法中的一种。非常感谢您提供有关select方法的所有其他信息。
For Each b In Worksheets
    b.buttons.Delete
    'or
    'b.buttons(1).delete
Next b