Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么在Excel中循环浏览形状时代码会崩溃?鬼影?_Excel_Vba - Fatal编程技术网

为什么在Excel中循环浏览形状时代码会崩溃?鬼影?

为什么在Excel中循环浏览形状时代码会崩溃?鬼影?,excel,vba,Excel,Vba,在使用VBA编写一个程序来定位和操作Excel中的形状时,我遇到了一个无法理解的错误!(还有什么新的吗?)经过半天的手表筛选,我得出结论,有时Excel会意外地保留剩余的形状。或者,至少出于一个我无法理解的原因 . . . i=1 For Each shp In .Shapes arrShapes(i, 1) = shp.TopLeftCell.Address arrShapes(i, 2) = shp.TopLeftCell.row

在使用VBA编写一个程序来定位和操作Excel中的形状时,我遇到了一个无法理解的错误!(还有什么新的吗?)经过半天的手表筛选,我得出结论,有时Excel会意外地保留剩余的形状。或者,至少出于一个我无法理解的原因

. . .
    i=1
    For Each shp In .Shapes
            arrShapes(i, 1) = shp.TopLeftCell.Address
        arrShapes(i, 2) = shp.TopLeftCell.row
        arrShapes(i, 3) = shp.TopLeftCell.Column
        arrShapes(i, 4) = shp.ID
        
    Next shp
这段代码大部分时间运行良好,但偶尔会出现错误“运行时错误1004:应用程序定义或对象定义错误” 虽然.Shapes.Count给了我7个形状,但最后一个导致了错误。我只能在我的床单上找到6个形状。(4条插入内容+2条注释)

(是的,我考虑了一个从0开始的索引,但事实并非如此,它创建了一个新的超出范围错误。此外,计数为7,并且观察程序中没有.Shapes.Item 0。)

(参考)


我的解决方案如下。很高兴听到其他人的看法。

进一步研究,Excel似乎认为这张表上有一个神秘的第七形状。(形状下的第7项)。但是这个物体的属性只有其他形状的一半

为了纪念万圣节,我称之为“鬼魂形状”

不知道它是从哪里来的。我找不到它。我在屏幕上看不到它。我不记得创建了它——这并不是说我没有。但如果我真的创建了它,我99.9%肯定我也删除了它

Excel给我的鬼魂形状命名为“第28行”。它有一个左上角的位置。(那里什么都没有)一行。前景色和可见光是真的

但是高度和宽度属性都是0

这至少给了我一种识别它们的方法,以过滤掉它们。 因此,我只是将代码修改为:

. . . 
On Error Resume Next
. . .
i=1
For Each shp In .Shapes
    If shp.Height = 0 And shp.Width = 0 _
            Or Err.Number = 424 Then
        shp.Delete        
    Else
        arrShapes(i, 1) = shp.TopLeftCell.Address
        arrShapes(i, 2) = shp.TopLeftCell.row
        arrShapes(i, 3) = shp.TopLeftCell.Column
        arrShapes(i, 4) = shp.ID
    End If
Next shp
这消除了重影形状中的错误,并在找到它们时将其删除


这会让我成为一个捉鬼者吗?

“最后一个导致了错误”因为你没有提到错误是什么,所以不清楚这里真正的“问题”是什么。如果只是在工作表上发现了一个出乎意料的“额外”形状,那么似乎不需要在这里记录它。如果不止这些,那么似乎添加一些实际的具体细节会很有用。错误是424-我在下面的“具体”回答中对此进行了澄清。Tim,我只是想分享知识。我尝试了IsEmpty、IsNothing、IsObject、IsNull、IsMissing、shp上的IsError和各种属性,但总是出现424错误。我应该补充一点,这是很难测试的,因为很难特意创建用于测试的“幽灵形状”。所以,我非常感谢任何贡献。谢谢。