首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在excel 2007 vba中以编程方式对一组形状进行分组?

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

Stack Overflow用户
提问于 2011-06-05 20:40:40
回答 5查看 45.1K关注 0票数 5

我正在迭代电子表格表上的数据,并在形状表上创建形状。一旦创建了这些形状,我想以编程方式对它们进行分组。然而,我无法找出正确的语法。形状是在那里,被选中,如果我点击组按钮,他们组合完美。但是,通过下面的代码,我得到了

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

我把这段代码建立在网络上的VBA示例之上--我不是一个强大的VBA程序员。怎样才是正确的方法?我正在使用excel 2007,切换excel版本不是一种选择。

问题片段:

代码语言:javascript
复制
Set shapeSheet = Worksheets("Shapes")

With shapeSheet
    Selection.ShapeRange.Group.Select
End With

上下文:

代码语言:javascript
复制
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
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-06-05 21:04:11

在Excel 2010中,这对我起了作用:

代码语言:javascript
复制
Sub GroupShapes()

    Sheet1.Shapes.SelectAll
    Selection.Group

End Sub

我在第1页上有两个形状,它们在调用上面的方法之前是未分组的,后面是分组的。

编辑

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

代码语言:javascript
复制
Sheet1.Shapes.Range(Array(1, 2, 3)).Select

使用名称:

代码语言:javascript
复制
Sheet1.Shapes.Range(Array("Oval 1", "Oval 2", "Oval 3")).Select
票数 7
EN

Stack Overflow用户

发布于 2011-06-05 22:54:23

不需要先选择,只需使用

代码语言:javascript
复制
Set shpGroup = shapeSheet.Shapes.Range(Array(Box1.Name, Box2.Name)).Group

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

票数 12
EN

Stack Overflow用户

发布于 2019-08-09 14:03:35

下面是如何轻松地将所有形状分组到不需要Select的工作表上:

代码语言:javascript
复制
ActiveSheet.DrawingObjects.Group

如果您认为/知道当前工作表中的任何形状都有分组,那么您需要首先对这些形状进行Ungroup

代码语言:javascript
复制
ActiveSheet.DrawingObjects.Ungroup  'include if groups already exist on the sheet
ActiveSheet.DrawingObjects.Group

我知道这个答案有点离题,但是添加了它,因为所有对Excel形状分组的搜索都倾向于指向这个问题

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6245725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档