我在.Group
上使用ShapeRange
方法时遇到了一些困难。
例如,我无法使用文本框对表格进行分组,也无法使用文本框等对幻灯片的标题形状进行分组。我注意到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 / etc)与原始形状保持相同的.Name
。我正在开发的应用程序为它创建的形状分配唯一的ID,但如果用户复制它们,这些ID将不会保持唯一。例如,某些用户可能会“复制”现有文本框,而不是插入新文本框。
由于应用程序需要维护和更新形状(表格,文本框,图表等),因此“复制”现有形状所创建的任何形状都可能导致问题,因为我的应用程序将无法再使用确定要更新,删除等的形状
我希望做的是Group
他们在一起。虽然它不是故障安全的(用户仍然可以手动Ungroup
他们,但我觉得这至少是一个额外的safegaurd。
答案 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)
如果您无法对物品进行分组,则会出现某种故障。请按照以下步骤“重新激活组功能”。看看这对你有帮助:
希望这有帮助!
答案 2 :(得分:0)
这是一个很长的路要走,但它会起作用(至少它对我有用,D)。
你要做的就是让你的桌子分别右键点击它们;你想要做的是将你的桌子保存为图片(因为JPEG将很好地用于此),无论是你的桌面还是其他方便的文件。然后将您的表格(图片形式)放回幻灯片中。你现在应该可以将所有的东西组合在一起了。
这是一个PITA,但至少它会起作用。祝你好运!