在为幻灯片编写宏时遇到了一些困难。 获得这个问题的解决方案对我来说真的很重要。我相信您可以帮助我。
在下面的代码中,我试图选择和分组幻灯片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在此处输入图片描述
答案 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”),但是您可以轻松地修改测试函数以获取所需的内容排除。