vba - 可以使用 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 将阴影应用到组时一样。相反,该组的所有子形状都设置了阴影,并且该组本身不会收到阴影。
解决方案
阴影是形状的属性。组不是形状。所以阴影只能应用于组的成员,而不是组本身。
要获得这种效果,请复制所有形状,用它们制作一个数组,使用 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)
推荐阅读
- javascript - 如何在多个 HighStocks 图表之间连接/同步 xAxis 十字准线
- kubernetes - kube cronjobs 的 Prometheus 多对多问题
- graphdb - 如何使用 sparql 或 rest 重命名 graphdb 存储库
- ios - CNContactViewController 与 CallKit 一起处理 CNContactPhoneNumbersKey
- android - Room:处理子实体列表
- cmake - 如何正确地将 .asm 代码添加到构建中?
- swift - 在子视图中显示视图控制器
- python - Pandas 数据框使用列作为行(融化)
- ms-access - 访问查询需要“最后一整周”
- java - "NoClassDefFoundError" when running .jar file with cmd