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属性.如果您在工作表上碰巧有其他形状并且选择了它们,那么它们将被分组.
这在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)