首页 > 解决方案 > 可以使用 VBA 将阴影应用于整个组(但不能应用于 GroupItems)?

问题描述

我正在使用 PowerPoint VBA 脚本将一些默认样式应用于选定对象,并且我遇到了分组对象的一些问题。本质上,如果我ShadowFormat对形状组应用调整,阴影将应用到组的项目而不是组本身。

在下面的示例中,白色框、蓝色框和蓝色圆圈都被分组。使用 GUI 在组上设置阴影会导致只有边界形状接收阴影(即,蓝色对象没有阴影)。但是,当通过 VB 脚本应用阴影时,阴影会分别应用于所有三个对象,这不是所需的行为。使用“格式调色板”检查组可验证没有直接将阴影应用到该组。

图片:团体问题 的阴影(抱歉链接,我还没有足够的代表来发布图片......)

这是一个代码片段。在此示例中,相关组是幻灯片上的第一项:

Set myDocument = ActivePresentation.Slides(1)
With myDocument.Shapes(1).Shadow
  .Visible = True
  .ForeColor.RGB = RGB(0, 0, 0)
  .Blur = 12
  .Transparency = 0.4
  .OffsetX = 0
  .OffsetY = 3
  .Obscured = msoTrue
End With

我希望阴影只应用于组,就像您使用 GUI 将阴影应用到组时一样。相反,该组的所有子形状都设置了阴影,并且该组本身不会收到阴影。

标签: vbapowerpoint

解决方案


阴影是形状的属性。组不是形状。所以阴影只能应用于组的成员,而不是组本身。

要获得这种效果,请复制所有形状,用它们制作一个数组,使用 MergeShapes 方法合并它们,将合并的形状发送到后面并对其应用阴影。以下是使用 MergeShapes 的方法,感谢 Shyam Pillai:

Dim shp1 As Shape
Dim shp2 As Shape
Set shp1 = ActivePresentation.Slides(1).Shapes.AddShape(msoShapeOval, 100, 100, 50, 50)
Set shp2 = ActivePresentation.Slides(1).Shapes.AddShape(msoShapePie, 100, 100, 50, 50)
Call ActiveWindow.Selection.SlideRange(1).Shapes.Range(Array(shp1.ZOrderPosition, shp2.ZOrderPosition)).MergeShapes(msoMergeCombine)

推荐阅读