select 一系列使用 excel visual basic 的多个图形
select multiple figures in a series using excel visual basic
使用 excel visual basic,我想 select 多个图形并将它们重复分组。
我的代码是这样的:
circleCnt = 5
For j = 1 To circleCnt
ActiveSheet.Shapes.AddShape(msoShapeOval, 500, 30, 40, 30).Select
Selection.ShapeRange.Height = minWidth + circleWidth * (circleCnt - j + 1)
Selection.ShapeRange.Width = minWidth + circleWidth * (circleCnt - j + 1)
Selection.ShapeRange.IncrementLeft circleWidth / 2 * (j - 1) + circleWidth / 2
Selection.ShapeRange.IncrementTop circleWidth / 2 * (j - 1) + circleWidth / 2
Next j
是的,它绘制了多个圆圈,我正在尝试使用这些代码来呈现我的数据。问题是...我的全部数据做了一百多个圈子,把所有的圈子都转移到powerpoint中需要很长时间
我想将样本中的圆圈组成一个组 - 如何 select 多个形状对象?我在想
for n = 1 to 5
select shape #n
next n
但是如您所见,这没有用
有 selection 的 'cumulative' 代码吗?或 select 处理最后一个对象并将它们放入一组先前分组的对象中?
-我不想把'all circles'分成一组-一个样本一组,有多个样本:)
尽量避免在代码中选择任何内容。这会使您的代码非常慢。我不太清楚你想做什么,但试试这样的事情:
dim objShape as Shape
for j = 1 To circleCnt
set objShape = Shapes.AddShape(msoShapeOval, 500, 30, 40, 30)
With objShape
.ShapeRange.Height = minWidth + circleWidth * (circleCnt - j + 1)
.ShapeRange.Width = minWidth + circleWidth * (circleCnt - j + 1)
.ShapeRange.IncrementLeft circleWidth / 2 * (j - 1) + circleWidth / 2
.ShapeRange.IncrementTop circleWidth / 2 * (j - 1) + circleWidth / 2
End With
next
set objShape = Nothing
添加形状后,您需要遍历 sheet 上的所有形状并将形状名称存储在数组中。使用它,您可以创建一个 ShapeRange
对象和 Group
形状。这是一个代码示例:
Sub GroupAllShapes()
Dim arrShapeNames() As Variant 'must be Variant to work with Shapes.Range()
Dim shp As Shape
Dim sr As ShapeRange
Dim ws As Worksheet
Dim i As Integer
Set ws = ActiveSheet
ReDim arrShapeNames(ws.Shapes.Count - 1)
i = 0
For Each shp In ws.Shapes
arrShapeNames(i) = shp.Name
i = i + 1
Next
Set sr = ws.Shapes.Range(arrShapeNames)
sr.Group
Set sr = Nothing
Set ws = Nothing
End Sub
注意:我从我的一些 C# 代码中移植了它,并使 arrShapeNames 数组具有从零开始的索引。对于 VBA.
,您可能需要使其基于 1
使用 excel visual basic,我想 select 多个图形并将它们重复分组。
我的代码是这样的:
circleCnt = 5
For j = 1 To circleCnt
ActiveSheet.Shapes.AddShape(msoShapeOval, 500, 30, 40, 30).Select
Selection.ShapeRange.Height = minWidth + circleWidth * (circleCnt - j + 1)
Selection.ShapeRange.Width = minWidth + circleWidth * (circleCnt - j + 1)
Selection.ShapeRange.IncrementLeft circleWidth / 2 * (j - 1) + circleWidth / 2
Selection.ShapeRange.IncrementTop circleWidth / 2 * (j - 1) + circleWidth / 2
Next j
是的,它绘制了多个圆圈,我正在尝试使用这些代码来呈现我的数据。问题是...我的全部数据做了一百多个圈子,把所有的圈子都转移到powerpoint中需要很长时间
我想将样本中的圆圈组成一个组 - 如何 select 多个形状对象?我在想
for n = 1 to 5
select shape #n
next n
但是如您所见,这没有用
有 selection 的 'cumulative' 代码吗?或 select 处理最后一个对象并将它们放入一组先前分组的对象中?
-我不想把'all circles'分成一组-一个样本一组,有多个样本:)
尽量避免在代码中选择任何内容。这会使您的代码非常慢。我不太清楚你想做什么,但试试这样的事情:
dim objShape as Shape
for j = 1 To circleCnt
set objShape = Shapes.AddShape(msoShapeOval, 500, 30, 40, 30)
With objShape
.ShapeRange.Height = minWidth + circleWidth * (circleCnt - j + 1)
.ShapeRange.Width = minWidth + circleWidth * (circleCnt - j + 1)
.ShapeRange.IncrementLeft circleWidth / 2 * (j - 1) + circleWidth / 2
.ShapeRange.IncrementTop circleWidth / 2 * (j - 1) + circleWidth / 2
End With
next
set objShape = Nothing
添加形状后,您需要遍历 sheet 上的所有形状并将形状名称存储在数组中。使用它,您可以创建一个 ShapeRange
对象和 Group
形状。这是一个代码示例:
Sub GroupAllShapes()
Dim arrShapeNames() As Variant 'must be Variant to work with Shapes.Range()
Dim shp As Shape
Dim sr As ShapeRange
Dim ws As Worksheet
Dim i As Integer
Set ws = ActiveSheet
ReDim arrShapeNames(ws.Shapes.Count - 1)
i = 0
For Each shp In ws.Shapes
arrShapeNames(i) = shp.Name
i = i + 1
Next
Set sr = ws.Shapes.Range(arrShapeNames)
sr.Group
Set sr = Nothing
Set ws = Nothing
End Sub
注意:我从我的一些 C# 代码中移植了它,并使 arrShapeNames 数组具有从零开始的索引。对于 VBA.
,您可能需要使其基于 1