Итерируя по выбранному набору фигур, как я могу сгруппировать текущий выбор и вновь созданную форму? - PullRequest
0 голосов
/ 22 апреля 2020

Я полный новичок в VBA, и вот что у меня есть:

Sub Align_Capability_Level()

Set myDocument = ActiveWindow.View.Slide

For Each sh In ActiveWindow.Selection.ShapeRange

    sh.Name = "bigBox"

    Set lilSquare = myDocument.Shapes.AddShape(msoShapeRectangle, _
        Left:=sh.Left + (sh.Width - Size), Top:=sh.Top + (sh.Height - Size), Width:=Size, Height:=Size)

    lilSquare.Name = "smallBox"

    myDocument.Shapes.Range(Array("smallBox", "bigBox")).Group

Next

End Sub

Когда я выберу три поля, он сгруппирует первый элемент в выделении и только что созданный блок, но он остановится и отобразит эту ошибку:

Объект ShapeRange должен содержать как минимум два элемента:

enter image description here

1 Ответ

0 голосов
/ 22 апреля 2020

Я полагаю, ваша проблема связана с именами. Код работает для первой итерации, группируя первую фигуру и первый созданный блок. В этой итерации вы называете фигуры Bigbox и Smallbox. Код сгруппирует эти два вместе.

Если теперь у вас либо выбрана другая фигура, либо вы выполняете код в другой раз, вам будет присвоено следующей фигуре также имя BigBox и новый созданный блок Smallbox , К сожалению, это возможно - однако это может спутать команду Group, она попытается сгруппировать первые Bigbox и первые Smallbox -формы - и поскольку они уже являются частью группы, вы получите сообщение об ошибке .

Попробуйте следующий код:

For Each sh In ActiveWindow.Selection.ShapeRange
    Dim lilSquare As Shape
    Set lilSquare = myDocument.Shapes.AddShape(msoShapeRectangle, _
        Left:=sh.Left + (sh.Width - size), Top:=sh.Top + (sh.Height - size), Width:=size, Height:=size)
    lilSquare.Name = sh.Name & "_smallBox"
    myDocument.Shapes.Range(Array(sh.Name, lilSquare.Name)).Group
Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...