我正在迭代电子表格表上的数据,并在形状表上创建形状。一旦创建了这些形状,我想以编程方式对它们进行分组。然而,我无法找出正确的语法。形状是在那里,被选中,如果我点击组按钮,他们组合完美。但是,通过下面的代码,我得到了
运行时错误438对象不支持此方法或属性。
我把这段代码建立在网络上的VBA示例之上--我不是一个强大的VBA程序员。怎样才是正确的方法?我正在使用excel 2007,切换excel版本不是一种选择。
问题片段:
Set shapeSheet = Worksheets("Shapes")
With shapeSheet
Selection.ShapeRange.Group.Select
End With上下文:
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发布于 2011-06-05 21:04:11
在Excel 2010中,这对我起了作用:
Sub GroupShapes()
Sheet1.Shapes.SelectAll
Selection.Group
End Sub我在第1页上有两个形状,它们在调用上面的方法之前是未分组的,后面是分组的。
编辑
若要使用索引选择特定形状:
Sheet1.Shapes.Range(Array(1, 2, 3)).Select使用名称:
Sheet1.Shapes.Range(Array("Oval 1", "Oval 2", "Oval 3")).Select发布于 2011-06-05 22:54:23
不需要先选择,只需使用
Set shpGroup = shapeSheet.Shapes.Range(Array(Box1.Name, Box2.Name)).GroupPS。您得到错误的原因是选择对象指向工作表上选择的任何内容(这将不是刚刚创建的形状),很可能是Range和Range没有Shapes属性。如果您碰巧在工作表上有其他形状,并且它们被选中,那么它们将被分组。
发布于 2019-08-09 14:03:35
下面是如何轻松地将所有形状分组到不需要Select的工作表上:
ActiveSheet.DrawingObjects.Group如果您认为/知道当前工作表中的任何形状都有分组,那么您需要首先对这些形状进行Ungroup:
ActiveSheet.DrawingObjects.Ungroup 'include if groups already exist on the sheet
ActiveSheet.DrawingObjects.Group我知道这个答案有点离题,但是添加了它,因为所有对Excel形状分组的搜索都倾向于指向这个问题
https://stackoverflow.com/questions/6245725
复制相似问题