【问题标题】:how to rename shape after two shape merge as a union?两个形状合并为一个联合后如何重命名形状?
【发布时间】:2022-01-25 20:40:22
【问题描述】:

我是 PowerPoint VBA 的新手。我想使用 VBA 合并两个形状。所以我在网上搜索并在这里找到了解决方案https://stackoverflow.com/a/46025003/17766045

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)

但我没有配置如何重命名该合并形状。

【问题讨论】:

  • 你试过ActiveWindow.Selection.SlideRange(1).Name = "TEST"吗?
  • 先生,在我的项目中还有其他形状,这个合并形状不在选择窗格的顶部或底部,它位于其他形状之间。

标签: vba powerpoint


【解决方案1】:

此合并形状不在选择窗格的顶部或底部,它位于其他形状之间

当您合并多个形状时,它会创建一个新形状,并且新创建的形状将位于 Z 顺序的顶部。

出于某种奇怪的原因,.MergeShapes 不会返回对新创建的形状的引用,但由于它将位于 Z 顺序的顶部,您可以参考它,如下面的代码示例所示:

Sub thing()
Dim shp1 As Shape
Dim shp2 As Shape
Dim aShapeArray As Variant
Dim oRange As ShapeRange

Set shp1 = ActivePresentation.Slides(1).Shapes.AddShape(msoShapeOval, 100, 100, 50, 50)
Set shp2 = ActivePresentation.Slides(1).Shapes.AddShape(msoShapePie, 100, 100, 50, 50)
' Using shape names rather than z-order position to fill the array and
' breaking the merge step into several simpler/easier to understand steps:
Set aShapeArray = ActivePresentation.Slides(1).Shapes.Range(Array(shp1.Name, shp2.Name))
Set oRange = aShapeArray
oRange.MergeShapes (msoMergeCombine)
    
 ActivePresentation.Slides(1).Shapes(ActivePresentation.Slides(1).Shapes.Count).Name = "BINGO!"
    End Sub

【讨论】:

  • 谢谢,先生。现在它可以按我的意愿完美运行了。
猜你喜欢
  • 1970-01-01
  • 2021-07-07
  • 1970-01-01
  • 2020-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-29
相关资源
最近更新 更多