如何在excel 2007 vba中以编程方式对一组形状进行分组?

And*_*ell 6 vba excel-2007 shapes

我正在迭代Electrical Tables表上的数据并在Shape表上创建形状.一旦创建了形状,我想以编程方式对它们进行分组.但是我无法弄清楚正确的语法.选中了形状,如果单击组按钮,它们就会完美分组.但是,我得到以下代码

运行时错误438对象不支持此方法或属性.

我将此代码基于Web上的vba示例 - 我不是一个强大的vba程序员.这样做的正确方法是什么?我正在使用excel 2007并且切换excel版本不是一个选项.

有问题的片段:

Set shapeSheet = Worksheets("Shapes")
With shapeSheet
 Selection.ShapeRange.Group.Select
End With
Run Code Online (Sandbox Code Playgroud)

背景:

Dim shapeSheet As Worksheet
Dim tableSheet As Worksheet
Dim shpGroup As Shape

Set shapeSheet = Worksheets("Shapes")
Set tableSheet = Worksheets("Electrical Tables")


With tableSheet
    For Each oRow In Selection.Rows
            rowCount = rowCount + 1
            Set box1 = shapeSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, 50, 50 + ((rowCount - 1) * 14), 115, 14)
            box1.Select (False)
            Set box1Frame = box1.TextFrame
            Set box2 = shapeSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, 165, 50 + ((rowCount - 1) * 14), 40, 14)
            box2.Select (False)
            Set box2Frame = box2.TextFrame
     Next
End With
Set shapeSheet = Worksheets("Shapes")
With shapeSheet
 Selection.ShapeRange.Group.Select
End With
Run Code Online (Sandbox Code Playgroud)

chr*_*sen 10

无需先选择,只需使用即可

Set shpGroup = shapeSheet.Shapes.Range(Array(Box1.Name, Box2.Name)).Group
Run Code Online (Sandbox Code Playgroud)

PS.你得到错误的原因是选择对象指向在工作表上选择的任何内容(它不是刚刚创建的形状)很可能是一个Range并且Range没有Shapes属性.如果您在工作表上碰巧有其他形状并且选择了它们,那么它们将被分组.


Nic*_*zer 6

这在Excel 2010中对我有用:

Sub GroupShapes()

    Sheet1.Shapes.SelectAll
    Selection.Group

End Sub
Run Code Online (Sandbox Code Playgroud)

我在工作表1上有两个形状,在调用上述方法之前先将其取消分组,然后再分组。

编辑

要使用索引选择特定形状:

Sheet1.Shapes.Range(Array(1, 2, 3)).Select
Run Code Online (Sandbox Code Playgroud)

使用名称:

Sheet1.Shapes.Range(Array("Oval 1", "Oval 2", "Oval 3")).Select
Run Code Online (Sandbox Code Playgroud)