Как программно сгруппировать набор фигур в Excel 2007 VBA? - PullRequest
4 голосов
/ 06 июня 2011

Я перебираю данные на листе «Электрические таблицы» и создаю фигуры на листе «Форма».Как только формы созданы, я хотел бы программно сгруппировать их.Однако я не могу понять правильный синтаксис.Формы там, выделены, и если я нажму кнопку группы, они отлично группируются.Однако с помощью следующего кода я получаю

Ошибка выполнения 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

Ответы [ 3 ]

8 голосов
/ 06 июня 2011

Нет необходимости выбирать сначала, просто используйте

Set shpGroup = shapeSheet.Shapes.Range(Array(Box1.Name, Box2.Name)).Group

PS. причина, по которой вы получаете ошибку, состоит в том, что объект выделения указывает на то, что выбрано на листе (которые не будут только что созданными фигурами), скорее всего, Range и Range не имеют Shapes собственность. Если у вас есть другие фигуры на листе, и они были выбраны, они будут сгруппированы.

4 голосов
/ 06 июня 2011

Это сработало для меня в 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
1 голос
/ 10 мая 2012

У меня была та же проблема, но мне нужно было выбрать пару фигур (ранее созданных макросом и перечисленных в массиве фигур), но не "select.all", потому что на слайде могут быть другие фигуры.

Создание shaperange было не очень простым. Самый простой способ - просто циклически перемещаться по объектам фигур (если вы их уже знаете) и выбирать их, имитируя «удерживать клавишу Ctrl» с параметром «Заменить: = Ложь».

Так вот мой код:

For ix = 1 To x
    bShp(ix).Select Replace:=False
Next
ActiveWindow.Selection.ShapeRange.Group

Надеюсь, это поможет, Керри.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...