根据标题删除按钮

时间:2018-08-03 13:13:50

标签: excel vba button shapes

使用Windows 10,Excel2016。代码在模块中。

该代码在2015年有效。现在它会引发错误。

该代码尝试按其标题查找按钮以将其删除。每个工作表只有一个按钮。

DeleteShapesByCaption "Create a new Schedule of Values tab", wSht

Sub DeleteShapesByCaption( _
ByVal Caption As String, _
Optional ByVal WS As Worksheet = Nothing)

Dim Shp As Shape, i as long

If WS Is Nothing Then Set WS = ActiveSheet

WS.Unprotect Protect_Password
For i = WS.Shapes.Count To 1 Step -1
    Set Shp = WS.Shapes(i)
    Select Case Shp.Type
    Case msoOLEControlObject
        If Shp.OLEFormat.Object.Object.Caption = Caption Then
            Shp.Delete  'This is where the error occurs
            Exit For
        End If
    Case msoFormControl
        'May be a button
        If Shp.OLEFormat.Object.Caption = Caption Then Shp.Delete
    End Select
Next i
WS.Protect Protect_Password
End Sub

该错误在第一次出现Shp.Delete时发生。

  

需要RTE 404对象

  

RTE -2147024809(80070057)指定的值超出范围

上下文:

工作簿中有一个工作表,它是一个模板。填充模板后,将其复制到第1个月。完成第1个月的工作表后,单击create_a_new_sheet_button为第2个月创建一个新工作表,并且应该从第1个月的工作表中删除create_a_new_sheet_button。每张纸只有一个按钮。

我已经使用debug.print确认活动表是上个月的表。

我修改了单元格公式以反映更改,但是我认为这些更改与错误无关,因为现在原始的2015年工作簿会产生错误。

代码按创建第1个月工作表的预期执行。唯一的不同是不会从模板页面中删除create_a_new_sheet按钮。

我可以更改标题并禁用该按钮,以免出错,但是最好删除它。

1 个答案:

答案 0 :(得分:0)

删除具有指定标题的按钮。 ActiveX控件。

Sub DeleteBtn()
    Dim btn As OLEObject, s As String

    s = "ButtonName"
    For Each btn In ActiveSheet.OLEObjects
        If TypeName(btn.Object) = "CommandButton" Then
            If btn.Object.Caption = s Then
                btn.Delete
            End If
        End If
    Next
End Sub