无法在Powerpoint 2010中对某些形状进行分组

时间:2013-05-24 14:47:17

标签: vba powerpoint powerpoint-vba

我在.Group上使用ShapeRange方法时遇到了一些困难。

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

Group is disabled for some shapes

我在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 / etc)与原始形状保持相同的.Name。我正在开发的应用程序为它创建的形状分配唯一的ID,但如果用户复制它们,这些ID将不会保持唯一。例如,某些用户可能会“复制”现有文本框,而不是插入文本框。

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

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

3 个答案:

答案 0 :(得分:1)

无法将某些形状分组为一个形状。但您可以使用 ShapeRange 将不同类型的形状绑定在一起。然后可以在自身的形状范围上设置一些属性,在特定项目上设置另一个属性。 HTH

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

答案 1 :(得分:1)

如果您无法对物品进行分组,则会出现某种故障。请按照以下步骤“重新激活组功能”。看看这对你有帮助:

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

    希望这有帮助!

答案 2 :(得分:0)

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

你要做的就是让你的桌子分别右键点击它们;你想要做的是将你的桌子保存为图片(因为JPEG将很好地用于此),无论是你的桌面还是其他方便的文件。然后将您的表格(图片形式)放回幻灯片中。你现在应该可以将所有的东西组合在一起了。

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