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