VBA PowerPoint "ObjectsGroup" выпуск "Целое число вне диапазона" - PullRequest
0 голосов
/ 03 октября 2018

Я нашел код, как сделать PowerPoint VBA Harvey balls , и я изменил последнюю строку на CommandBars.ExecuteMso ("ObjectsGroup") вместо CommandBars.ExecuteMso ("ShapesCombine").Первый запуск макроса прошел нормально, но когда я снова запустился (первый шар Харви был на слайде), у меня была ошибка

Фигуры (неизвестный член): целое число вне диапазона.[#] не находится в допустимом диапазоне от [#] до [#]

на линии Set oshpR = sld.Shapes.Range(Array(shp1.ZOrderPosition, shp2.ZOrderPosition))

Если фигуры объединены в одну - естьНет ошибок.Появляется только с установленной группой.Мне нужны эти фигуры, так как группа установлена ​​на одном слайде.И на слайде может быть несколько комплектов.

Подскажите, пожалуйста, кто это может исправить?Я предполагаю, что это может быть проблемой, потому что это может быть множество других групповых наборов (не харви шаров) на слайде.

Спасибо, Лена

Sub Test2()
Dim sld As Slide
Dim shp1 As Shape
Dim shp2 As Shape
Dim oshpR As ShapeRange</p>

<code>Set sld = Application.ActiveWindow.View.Slide
Set shp1 = ActivePresentation.Slides(1).Shapes.AddShape(msoShapeOval, 300, 100, 50, 50)
Set shp2 = ActivePresentation.Slides(1).Shapes.AddShape(msoShapePie, 300, 100, 50, 50)
Set oshpR = sld.Shapes.Range(Array(shp1.ZOrderPosition, shp2.ZOrderPosition))
CommandBars.ExecuteMso ("ObjectsGroup") End Sub
</code>

1 Ответ

0 голосов
/ 03 октября 2018

Группировка через CommandBars.ExecuteMso требует, чтобы были сгруппированы фигуры.Создание диапазона формы не подразумевает выбор форм в диапазоне.

Попробуйте вместо этого:

Sub Test2()
Dim sld As Slide
Dim shp1 As Shape
Dim shp2 As Shape
Dim oshpR As ShapeRange

Set sld = Application.ActiveWindow.View.Slide
Set shp1 = ActivePresentation.Slides(1).Shapes.AddShape(msoShapeOval, 300, 100, 50, 50)
Set shp2 = ActivePresentation.Slides(1).Shapes.AddShape(msoShapePie, 300, 100, 50, 50)
'Set oshpR = sld.Shapes.Range(Array(shp1.ZOrderPosition, shp2.ZOrderPosition))
' msoTrue forces a new selection
shp1.Select msoTrue
' msoFalse adds the shape to the current selection
shp2.Select msoFalse
CommandBars.ExecuteMso ("ObjectsGroup")
End Sub

Вы также можете просто выбрать определенный диапазон формы:

Set oshpR = sld.Shapes.Range(Array(shp1.ZOrderPosition, shp2.ZOrderPosition))
oshpR.Select msoTrue
CommandBars.ExecuteMso ("ObjectsGroup")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...