首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >删除定义区域中的图片

删除定义区域中的图片
EN

Stack Overflow用户
提问于 2022-08-30 07:59:21
回答 1查看 37关注 0票数 1

我将图像插入到指定区域(rngOblastVlozeni)中。但是在插入图像之前,我想删除到目前为止已经存在的所有图像。

我使用VBA的以下部分来完成此操作:

代码语言:javascript
运行
复制
Dim shpObjekt As Shape 

With rngOblastVlozeni.Parent 

    For Each shpObjekt In .Shapes           

        If Application.Intersect(shpObjekt.TopLeftCell, rngOblastVlozeni) Is Nothing Then   

        Else 

            If (shpObjekt.Type = msoPicture) Or (shpObjekt.Type = msoLinkedPicture) Then    

                shpObjekt.Delete                                                                

            End If 

        End If 

    Next shpObjekt 

End With

但在某些情况下我会收到错误

代码语言:javascript
运行
复制
Run-time error '1004':

Application-defined or object-defined error

错误出现在行If Application.Intersect(shpObjekt.TopLeftCell, rngOblastVlozeni) Is Nothing Then中,可能在部分shpObjekt.TopLeftCell中。

当我试图更详细地捕捉它时:

  • I有两张图片和一张图表在工作表上
  • 在指定区域

中插入另一张图像

如果该区域为空,则两个shpObjects将无错误地通过,并且直到第三个错误才会出现错误。

如果该区域有一幅图像,那么三个shpObjects就可以了,错误在第四个。

当我同时删除图像和图形,以及该区域的任何图像时,仍然会出现错误(如果没有图像,那么如果有图像,则作为第一个shpObject,然后作为第二个shpObject) --由此推断错误与这些图像中的任何一个都无关。

还有更多的形状收藏吗?例如,从以前的事件?

如果是这样的话,是否有人建议添加代码,以便我“忽略”错误只在此错误的情况下,并且只在VBA的这一部分,并跳转到下一个shpObjekt发生?

还有一个补充--如果我在另一个工作表上使用完全相同的代码,它似乎不会导致这个问题,也就是说,在没有任何问题的情况下,它发生了--也就是说,我似乎在有问题的工作表上有一些额外的对象,但我找不到。我尝试了F5 -去所有的对象,我删除了他们,但问题没有解决-也就是说,它可能不是一个可见的对象?

所以,问题:

  1. ,我的床单上有可能还有另一个Shape Object吗?有可能以某种方式识别它吗?

  1. 任何关于如何跳过零件的推荐

如果Application.Intersect(shpObjekt.TopLeftCell,rngOblastVlozeni)没有什么,那么If (shpObjekt.Type = msoPicture)或(shpObjekt.Type = msoLinkedPicture)则shpObjekt.Delete结束If : End If

如果If Application.Intersect(shpObjekt.TopLeftCell, rngOblastVlozeni) Is Nothing生成错误1004 (最佳情况下只有此错误)?

谢谢:-)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-30 13:59:11

关于你的两个具体问题:

如果您的工作表中没有工作表,我不能说它是否有另一个形状,但是您可以使用

  1. 测试(参见下面的代码)
  2. 测试,如果shpObjekt及其Address属性不是空的(请参见下面的代码)

代码语言:javascript
运行
复制
Dim shpObjekt As Shape

With rngOblastVlozeni.Parent

    For Each shpObjekt In .Shapes

        If Not shpObjekt Is Nothing Then
            
            If Not shpObjekt.TopLeftCell Is Nothing Then
                
                If Application.Intersect(shpObjekt.TopLeftCell, rngOblastVlozeni) Is Nothing Then
                
                    Debug.Print "Not intersecting:", shpObjekt.Name, shpObjekt.TopLeftCell.Address, shpObjekt.Type
                
                Else
                    
                    Debug.Print "Intersecting:", shpObjekt.Name, shpObjekt.TopLeftCell.Address, shpObjekt.Type
                    
                    If (shpObjekt.Type = msoPicture) Or (shpObjekt.Type = msoLinkedPicture) Then
    
                        shpObjekt.Delete
    
                    End If
    
                End If
            
            End If
        
        End If

    Next shpObjekt

End With

此外,我认为您所遇到的问题的根本原因很可能是您在删除该集合的成员时使用一个For迭代一个集合(即形状).当删除.时,最好使用Next并向后循环。为此,您的代码将成为

代码语言:javascript
运行
复制
Dim shpObjekt As Shape

Dim index As Long

With rngOblastVlozeni.Parent

    For index = .Shapes.Count To 1 Step -1

        Set shpObjekt = .Shapes.Item(index)
        
        If Not shpObjekt Is Nothing Then

            If Not shpObjekt.TopLeftCell Is Nothing Then

                If Application.Intersect(shpObjekt.TopLeftCell, rngOblastVlozeni) Is Nothing Then

                    Debug.Print "Not intersecting:", shpObjekt.Name, shpObjekt.TopLeftCell.Address, shpObjekt.Type

                Else

                    Debug.Print "Intersecting:", shpObjekt.Name, shpObjekt.TopLeftCell.Address, shpObjekt.Type

                    If (shpObjekt.Type = msoPicture) Or (shpObjekt.Type = msoLinkedPicture) Then

                        shpObjekt.Delete

                    End If

                End If

            End If

        End If

    Next index

End With
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73538974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档