多选形状,并根据PowerPoint幻灯片中的条件取消选择特定形状

时间:2019-11-21 06:29:03

标签: powerpoint-vba

在为幻灯片编写宏时遇到了一些困难。 获得这个问题的解决方案对我来说真的很重要。我相信您可以帮助我。

在下面的代码中,我试图选择和分组幻灯片1中可用的所有对象(形状)。 但是我想从形状选择中排除标题和表格。 而且我还想排除包含文本“ Source”的形状。

但是在“取消选择”时出现错误。

请帮帮我。预先感谢。

这是我的代码。我还附上了快照,以便更好地理解

Sub Selectunselect()

Dim Shp As Shape
Dim curSlide As Long

ActivePresentation.Slides(1).Shapes.SelectAll
For Each Shp In ActiveWindow.Selection.ShapeRange

If Shp.HasTable Then
Shp.Unselect
End If
Next Shp

If Shp.HasTitle Then
Shp.Unselect
End If
Next Shp

If Shp.TextFrame.TextRange = "Source" Then
Shp.Unselect
End If
Next Shp


If Shp.TextFrame.HasText And Shp.TextFrame.TextRange.Text = "Source*" Then
Shp.Unselect
End If
Next Shp

End Sub

enter image description here在此处输入图片描述

enter image description here

1 个答案:

答案 0 :(得分:1)

您的错误可能是由以下行引起的:

Shp.TextFrame.TextRange = "Source"

应该是:

Shp.TextFrame.TextRange.Text = "Source"

但是,总的来说,您的方法存在的问题是,最好只选择所需的形状,而不是选择所有形状并尝试取消选择它们。这样应该会更好一些:

Public Sub SelectAllShapes()


            Dim shapeCollection() As Variant
            Dim shpCounter As Long
            Dim oShp As Shape
            Dim currentSlide As Slide

            Set currentSlide = Application.ActiveWindow.View.Slide

            shpCounter = 0
            ReDim shapeCollection(shpCounter)

            For Each oShp In currentSlide.Shapes

            If oShp.Type <> msoPlaceholder And IsItSource(oShp) = False Then
                ReDim Preserve shapeCollection(shpCounter)
                shapeCollection(shpCounter) = oShp.Name
                shpCounter = shpCounter + 1
            End If

            Next

            currentSlide.Shapes.Range(shapeCollection).Select


End Sub


Public Function IsItSource(oShp As Shape) As Boolean

    If oShp.HasTextFrame = False Then
        IsItSource = False
    ElseIf oShp.TextFrame.HasText = False Then
        IsItSource = False
    Else
        If oShp.TextFrame.TextRange.text = "Source" Then
            IsItSource = True
        Else
            IsItSource = False
        End If
    End If

End Function

作为快捷方式,我没有编写单独的函数来检查标题或表格(附加函数仅检查占位符和文本“ Source”),但是您可以轻松地修改测试函数以获取所需的内容排除。