使用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按钮。
我可以更改标题并禁用该按钮,以免出错,但是最好删除它。
答案 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