1

.GroupShapeRange.

例如,我不能用文本框对表格进行分组,也不能用文本框对幻灯片的标题形状进行分组,等等。我注意到 Powerpoint 不允许您将某些形状组合在一起,作为“组”上下文菜单上的选项被禁用:

某些形状禁用组

我在 VBA 中尝试了以下操作,但可以预见的是失败:

Sub TestGroupShapes()

    Dim sld As slide
    Dim tb As Shape
    Dim tb2 As Shape
    Dim tbl As Shape

    Set sld = ActivePresentation.Slides(1)
    Set tbl = sld.Shapes.AddTable(3, 3, 100, 100, 100, 100)
    tbl.Name = "Table"
    Set tb = sld.Shapes.AddTextbox(msoTextOrientationHorizontal, 200, 200, 50, 50)
    tb.Fill.Visible = msoCTrue
    tb.Name = "TextBox1"
    Set tb2 = sld.Shapes.AddTextbox(msoTextOrientationHorizontal, 300, 300, 50, 50)
    tb2.Fill.Visible = msoCTrue
    tb2.Name = "TextBox2"

    '## This works. I am able to group two textbox shapes together:
    sld.Shapes.Range(Array(tb2.Name, tb.Name)).Group

    '## This fails, I am not able to group a shape with a Table
    '   Also fails, e.g., if I try to group with the slide's Title shape, etc.
    sld.Shapes.Range(Array(tbl.Name, tb.Name)).Group


End Sub

还有其他方法可以用来将某些形状“捆绑”在一起吗?

2013 年 5 月 25 日更新

问题是用户可能复制的形状(Ctrl+V/等).Name与原始形状保持一致。我正在开发的应用程序为其创建的形状分配唯一的 ID,但如果用户复制它们,这些 ID 将不会保持唯一。例如,某些用户可能会“复制”现有的文本框,而不是插入的文本框。

由于应用程序需要维护和更新形状(表格、文本框、图表等),因此通过“复制”现有形状创建的任何形状都可能导致问题,因为我的应用程序将不再能够确定哪个要更新、删除等的形状。

我希望做的是Group他们在一起。虽然它不是故障安全的(用户仍然可以手动操作Ungroup它们,但我觉得这至少是一个额外的安全措施。

4

3 回答 3

1

无法将某些形状组合为一个形状。但是您可以使用ShapeRange将不同类型的形状联系在一起。然后可以在它自己的形状范围上设置一些属性,在特定项目上设置另一个属性。高温高压

Sub test()

    Dim tableShape As Shape
    Dim textboxShape1 As Shape
    Dim textboxShape2 As Shape
    Dim myShapeRange As ShapeRange

    With ActivePresentation.Slides(1)
        Set tableShape = .Shapes.AddTable(3, 3, 100, 100, 100, 100)
        tableShape.Name = "Table"

        Set textboxShape1 = .Shapes.AddTextbox(msoTextOrientationHorizontal, 200, 200, 50, 50)
        textboxShape1.Name = "TextBox1"

        Set textboxShape2 = .Shapes.AddTextbox(msoTextOrientationHorizontal, 300, 300, 50, 50)
        textboxShape2.Name = "TextBox2"

        Set myShapeRange = .Shapes.Range(Array("Table", "TextBox1", "TextBox2"))
    End With

    Call FormatShapes(myShapeRange)

End Sub

Private Sub FormatShapes(inputShapeRange As ShapeRange)
    Dim shapeItem As Shape

    With inputShapeRange
        .Align msoAlignLefts, msoFalse
        .AlternativeText = "My group 123"
    End With

    For Each shapeItem In inputShapeRange
        With shapeItem
            .Fill.Visible = msoTrue
            .Fill.Solid
            .Fill.ForeColor.RGB = RGB(255, 0, 0)
            .Fill.TwoColorGradient msoGradientHorizontal, 1
        End With
    Next shapeItem
End Sub
于 2013-05-24T19:51:20.337 回答
1

当您无法对您的项目进行分组时,就会出现某种故障。请按照以下步骤“重新激活群组功能”。看看这是否对您有帮助:

  1. 在演示文稿中添加新幻灯片(您可以稍后将其删除)
  2. 插入三种不同颜色的三种形状
  3. 排列形状以尝试分组(组功能应该返回)
  4. 如果它没有返回,临时解决方法是右键单击您选择的 3 个项目,然后选择“图片”粘贴选项(看起来像剪贴板和图片图标),这也应该将项目组合在一起。

希望这可以帮助!

于 2015-08-04T21:00:55.473 回答
0

这是一个很长的路要走,但它会起作用(至少它对我有用,:D)。

您要做的是制作表格,然后分别右键单击它们;您想要做的是将您的表格作为图片保存到您的桌面或其他一些方便的文件中(因为 JPEG 非常适合此)。然后将您的表格(以图片形式)放回幻灯片中。您现在应该能够将所有东西组合在一起。

这是一个 PITA,但至少它会起作用。祝你好运!

于 2013-08-12T01:19:02.013 回答