检查Autoshape是否存在

时间:2018-04-01 09:35:57

标签: excel excel-vba excel-2003 vba

我正在尝试创建一个简单的宏来删除一些数据,包括Autoshape   - Shapes("ACCESS"),但我希望此宏仅在Autoshape存在时运行。

如果它不存在,则操作只是Range("B2").Select

有人可以帮忙吗?

我的代码

Sub DeleteRepWT()

ActiveSheet.Shapes("ACCESS").Select
Selection.ShapeRange.IncrementLeft 57#
Selection.ShapeRange.IncrementTop -85.5
Range("M4").Select
ActiveSheet.Shapes("ACCESS").Select
Selection.Delete
Columns("K:AI").Select
Selection.Delete Shift:=xlToLeft
Range("B2").Select

End Sub

1 个答案:

答案 0 :(得分:1)

您可以在我的代码Shp中使用对象类型形状,并尝试将其设置为Set Shp = ActiveSheet.Shapes("ACCESS")

在尝试On Error Resume Next形状对象之前添加Set(因此无法获得运行时错误),尝试Set形状后,您可以检查If Shp Is Nothing,表示检查您是否能够Set形状(如果您不是,则表示工作表中没有Shapes("ACCESS"))。

<强>代码

Option Explicit

Sub DeleteRepWT()

Dim Shp As Shape

On Error Resume Next
Set Shp = ActiveSheet.Shapes("ACCESS") ' try to set the object to "ACCESS"
On Error GoTo 0

If Shp Is Nothing Then ' if there is no Shapes("ACCESS")
    Range("B2").Select 
Else ' shape exists
    With Shp
        ' rest of your original code here ...

    End With
End If

End Sub