【问题标题】:Deleting a button based on caption根据标题删除按钮
【发布时间】:2018-08-03 13:13:50
【问题描述】:

使用 Windows 10、Excel 2016。代码位于模块中。

代码在 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 确认 activesheet 是上个月的工作表。

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

代码在创建第 1 个月的工作表时按预期执行。唯一的区别是 create_a_new_sheet 按钮没有从模板页面中删除。

我可以更改标题并禁用按钮作为无错误的解决方法,但最好将其删除。

【问题讨论】:

  • 为什么不直接删除活动工作表上的所有按钮,以避免任何形状问题#:Sheets(i).Buttons.Delete
  • 如果您知道命令按钮的名称,则使用命令按钮名称将其删除。ActiveSheet.Shapes("CommandButtonName").Delete
  • @Cyril 很可能在我添加功能时,我会添加额外的按钮,所以我希望代码在删除内容时具有选择性,我可以继续使用。
  • @Davesexcel 我不知道命令按钮的名称。标题在每张纸中都是唯一的。该代码确实选择了正确的按钮。选择不是问题,删除才是问题。
  • 您的代码未能删除与启动尝试删除自身的进程相同的按钮吗?我不知道这是否是一个问题,但我可以想象它可能会导致一个问题。

标签: excel vba button shapes


【解决方案1】:

删除带有指定标题的按钮。 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

【讨论】:

    猜你喜欢
    • 2012-11-26
    • 2017-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多