VBA Excel 2010运行时错误1004-应用程序定义或对象定义错误

VBA Excel 2010运行时错误1004-应用程序定义或对象定义错误,excel,runtime-error,vba,Excel,Runtime Error,Vba,我是一名新的分析师,正在处理启用宏的工作表。在同一工作表上多次运行宏(即创建、删除)时,我遇到了一些相当常见的运行时错误。我在互联网上进行了研究,发现出现错误的原因是,我的对象/变量没有在每次重新运行宏时释放。快速解决方法是,每次在运行宏之前进行更改时,我都会保存工作表;但是,似乎有一个更好的解决方案,可以通过每次运行宏时将代码更改为“重新定义”对象来完全消除此问题。由于我是VBA新手,我正在寻求以下代码行的帮助: Sub Delete_Icons() ' INTERSECT COMMAN

我是一名新的分析师,正在处理启用宏的工作表。在同一工作表上多次运行宏(即创建、删除)时,我遇到了一些相当常见的运行时错误。我在互联网上进行了研究,发现出现错误的原因是,我的对象/变量没有在每次重新运行宏时释放。快速解决方法是,每次在运行宏之前进行更改时,我都会保存工作表;但是,似乎有一个更好的解决方案,可以通过每次运行宏时将代码更改为“重新定义”对象来完全消除此问题。由于我是VBA新手,我正在寻求以下代码行的帮助:

Sub Delete_Icons()

  ' INTERSECT COMMAND DETERMINES IF A SHAPE EXISTS WITHIN A SPECIFIED RANGE.

  ' IF THERE IS A SHAPE WITHIN ROWS 3 AND 1000 THEN IT WILL BE DELETED.

  ' THIS DOES NOT DELETE THE MACRO BUTTON IN ROWS 1 AND 2.

    Dim shp As Shape

    For Each shp In ActiveSheet.Shapes

        *' this below line caused run-time error 1004*
        **If Not Intersect(shp.TopLeftCell, Range("A3:F1000")) Is Nothing Then**   
         shp.Delete
        End If
    Next shp

如果您能帮助修复这行代码中的运行时错误,我们将不胜感激。谢谢。

范围
对象的两个实例定义了
相交
函数,而不是
范围
形状

试着这样做:

Dim shp As Shape, rng As Range
Dim i As Integer, j As Integer

    For i = 1 To ActiveSheet.Shapes.Count
        Set shp = ActiveSheet.Shapes(i)
        For j = 1 To ActiveSheet.Shapes.Range.Count
            Set rng = ActiveSheet.Shapes(i).Range
            ' this below line caused run-time error 1004*
            If Not Intersect(rng, Range("A3:F1000")) Is Nothing Then
             shp.Delete
            End If
        Next j
    Next i

如果此处的目的只是为了避免删除某些特定形状,那么您可以将事情简化为仅测试名称。因此,对于每个循环,
中的测试可以是
如果shp.Name为“foo”,那么