在不使用.type属性

时间:2017-12-10 18:10:01

标签: vba powerpoint powerpoint-vba powerpoint-2010 powerpoint-2013

我测试过的脚本是从excel应用程序运行的,它将计算图片的形状和实际形状的数量(即文本框,占位符).Below是弹出带有图片和形状数量的消息的脚本

Sub countshapes()
Dim strname As String
Dim thisslide As Long
Dim strshape() As String

-----Count the number of slides in presentation 

For thisslide = 1 To ActivePresentation.Slides.count

With ActivePresentation.Slides(thisslide)
ReDim strshape(0 To 0)

For Each oshp In .Shapes

If InStr(1, oshp.Name, "Picture") > 0 Then
ReDim Preserve strshape(0 To a)
strshape(a) = oshp.Name
a = a + 1

Else

ReDim Preserve strshape(0 To d)
strshape(d) = oshp.Name
d = d + 1
End If

Next oshp
End With
Next
MsgBox a
MsgBox d

完美显示形状和图片的数量 但是我无法获得形状组的计数,这可以通过.type = msogroup属性轻松实现,但是该属性在某些具有多个分组形状的演示文稿中无法帮助我。

请帮助我使用与上述脚本类似的形状名称来更新脚本<​​/ p>

1 个答案:

答案 0 :(得分:0)

您在问题中提到过,您不想使用.Type属性来解释其原因。由于它为您提供了直接的方式来满足您的需求,我将提到您可以测试每个oShp的.Type,如果它是msoGroup,oShp.GroupItems.Count将为您提供组中的形状数。例如,您可以将每个形状传递给此函数并在结束时对结果求和:

Function CountGroupShapes(oSh As Shape) As Long
    If oSh.Type = msoGroup Then
        CountGroupShapes = oSh.GroupItems.Count
    Else
        CountGroupShapes = 1
    End If
End Function

请记住,如果组内有组,则不会给出准确的结果。