在不使用 .type 属性 的情况下计算 powerpoint 中的形状组
Count the group of shapes in powerpoint without using .type property
我测试的脚本是来自excel应用程序的运行,它将计算图片的形状和实际形状(即文本框,占位符)的数量。下面是脚本弹出带有图片和形状计数的消息
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 属性 轻松实现,但是 属性 在一些具有许多分组形状的演示文稿中对我没有帮助。
请像上面的脚本一样使用形状名称帮助我更新脚本
您在问题中提到不想使用 .Type 属性 w/o 来解释原因。由于它为您提供了一种直接的方式来执行您需要的操作,我会提到您可以测试每个 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
请记住,如果组中有组,这将不会给出准确的结果。
我测试的脚本是来自excel应用程序的运行,它将计算图片的形状和实际形状(即文本框,占位符)的数量。下面是脚本弹出带有图片和形状计数的消息
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 属性 轻松实现,但是 属性 在一些具有许多分组形状的演示文稿中对我没有帮助。
请像上面的脚本一样使用形状名称帮助我更新脚本
您在问题中提到不想使用 .Type 属性 w/o 来解释原因。由于它为您提供了一种直接的方式来执行您需要的操作,我会提到您可以测试每个 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
请记住,如果组中有组,这将不会给出准确的结果。