根据MSDN Shape.Child
是“msoTrue,如果形状是子形状,或者形状范围内的所有形状都是同一父级的子形状。”
这似乎对新创建的组或重新分组的对象有效。但是,如果我创建了一组几个对象(在PPT 2010中的其他空白幻灯片上)和复制这个组我得到了
ActiveWindow.Selection.SlideRange(1).Shapes(1).GroupItems(1).Child = msoTrue
ActiveWindow.Selection.SlideRange(1).Shapes(2).GroupItems(1).Child = msoFalse
似乎为原始组副本的子形状重置Child
属性。
我是否有损坏的安装或这是一个错误(使用已知的修复/解决方法)?
答案 0 :(得分:2)
我也遇到过这个问题,所以我猜测这是一个错误。
解决方法强>
到目前为止,我发现的唯一解决方法是取消组合并重新组合感兴趣的小组:
Shape copiedGroup = ActiveWindow.Selection.SlideRange(1).Shapes(2); // this is the group whose children don't know they are children
Shape fixedGroup = copiedGroup.Ungroup().Regroup(); // now all children know their parent again
使用此修复程序,子项将返回msoTrue
Child
属性的ParentGroup
,{{1}}将返回组形状。
<强>注意事项强>
如果之前选择了要修复的组,则现在将取消选择该组。
答案 1 :(得分:1)
我在不同的机器上看到同样的问题,NobodysNightmare也证实了这似乎是一个错误的有力证据。
我想到的另一种解决方法是迭代所有这样的形状。我不太喜欢这种方法,但似乎有效。
Function IsChild(s As Shape) As Boolean
For i = 1 To s.Parent.Shapes.Count
If s.Parent.Shapes(i).Type = msoGroup Then
For j = 1 To s.Parent.Shapes(i).GroupItems.Count
If s.Parent.Shapes(i).GroupItems(j) Is s Then IsChild = True
Next
End If
Next
End Function
答案 2 :(得分:0)
我还发现,当复制分组的形状时,复制的形状往往会失去“父/子”属性或关系。 NobodysNightmare的解决方案效果很好。 因此,当我复制分组的形状时,我会做以下技巧。
sub CopyShape()
dim sld1 as Slide, sld2 as Slide
dim shp as Shape
Set sld1 = ActivePresentation.Slides(1)
Set sld2 = ActivePresentation.Slides(2) ' the target slide to copy the shape on
Set shp = sld1.Shapes("myShape") ' the target shape
shp.Copy
With sld2.Shapes.Paste
'if it's a group, ungroup and regroup the shape and name it again as before
If shp.Type = msoGroup Then .Ungroup.Regroup.Name = shp.Name
'Now the copied shape has recovered it's Parent/Child property
End With
end sub