【发布时间】: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 我不知道命令按钮的名称。标题在每张纸中都是唯一的。该代码确实选择了正确的按钮。选择不是问题,删除才是问题。
-
您的代码未能删除与启动尝试删除自身的进程相同的按钮吗?我不知道这是否是一个问题,但我可以想象它可能会导致一个问题。