代码之家  ›  专栏  ›  技术社区  ›  user6089076

Powerpoint中存在形状

  •  1
  • user6089076  · 技术社区  · 7 年前

    我想在启用宏的powerpoint演示文稿上的命令按钮上建立一个条件。如果该形状存在,那么我希望将其删除,否则按钮应生成一条关于不存在此类形状的声明。目前我的存在有问题。。。!如何让Power point识别形状为空?这是我的代码:

    If ActivePresentation.Slides(3).Shapes("Picture") Is Nothing Then
      MsgBox "no Picture"
    Else
      ActivePresentation.Slides(3).Shapes("Picture").Delete
      MsgBox "Picture Cleared"
    End If
    

    此代码只会产生错误,因为形状不存在,所以第一个if语句失败。也许我们需要检查它是否在选择窗格中?

    2 回复  |  直到 7 年前
        1
  •  4
  •   Steve Rindsberg    7 年前

    其他一些建议会奏效,但一般来说,除非绝对必要,否则依赖选择是不好的做法。相反,您可以调用稍微不同的函数:

    Function ShapeExists(ByVal oSl as Slide, ByVal ShapeName as String) as Boolean
       Dim oSh as Shape
       For Each oSh in oSl.Shapes
         If oSh.Name = ShapeName Then
            ShapeExists = True
            Exit Function
         End If
       Next ' Shape
       ' No shape here, so though it's not strictly necessary:
       ShapeExists = False
    End Function
    

    您还可以修改此选项,以便在找到形状时返回对该形状的引用,如果没有,则不返回任何内容。

    如果您不喜欢使用早期退出功能,那么有一些简单的方法可以解决这个问题。

        2
  •  3
  •   QHarr    7 年前

    正如@DavidMeedham在评论中的链接所示(@ TimWilliams answer ),可以使用类似的构造,如下所示:

    Option Explicit
    
    Sub test()
    
    Dim shp As Shape
    Dim myshapeName As String
    myshapeName = "Picture"
    Dim sl As Slide
    
    Set sl = ActivePresentation.Slides(1)
    
     If shapePresent(sl, myshapeName) Then
    
         sl.Shapes(myshapeName).Delete
    
     Else
    
        MsgBox myshapeName & " not present"
    
     End If
    
    End Sub
    
    
    Private Function shapePresent(ByVal sl As Slide, ByVal myshapeName As String) As Boolean
    
       On Error GoTo errhand
    
       sl.Shapes(myshapeName).Select
    
       shapePresent = True
       Exit Function
    
    errhand:
    
    shapePresent = False
    Err.Clear
    
    End Function
    

    使用与该答案相同的格式:

    Private Function shapePresent(ByVal sl As Slide, ByVal myshapeName As String) As Boolean
    
        Dim myShape As Shape
    
        On Error Resume Next
    
        Set myShape = sl.Shapes(myshapeName)
    
        On Error GoTo 0
    
        shapePresent = Not myShape Is Nothing
    
    End Function