Powerpoint VBA Сделать дублированный вид формы активным для выбора для группировки
У меня есть библиотека из восьми изображений на слайде PowerPoint. На основе ввода пользовательской формы некоторые компоненты дублируются и переименовываются путем добавления "1" или "2" после имени исходного изображения, чтобы их можно было различить. Затем я хочу сгруппировать новые изображения (я создаю элемент из изображений компонентов). Я могу продублировать изображения и правильно выстроить их в ряд, но у меня возникают проблемы с их группировкой. Обратите внимание, что я не всегда группирую одинаковое количество элементов, это зависит от ввода пользователя.
Я получаю сообщение об ошибке "Форма (неизвестный элемент): неверный запрос. Чтобы выбрать форму, ее представление должно быть активным".
Я искал и пытался реализовать несколько стратегий на форумах помощи, но сейчас я нахожусь пустым.
ПОЖАЛУЙСТА ПОМОГИ!!! Кевин
Часть кода ниже, потому что она очень длинная, но здесь возникает моя первая проблема:
Dim Cargo As Shape, Cargo_Dup as Shape, Chemical as Shape, Chemical_Dup as Shape
Set Cargo = ActivePresentation.Slides(2).Shapes("Cargo")
Set Chemical = ActivePresentation.Slides(2).Shapes("Chemical")
Cargo.Name = "Cargo"
Chemical.Name = "Chemical"
With ActivePresentation
Set Cargo_Dup = ActivePresentation.Slides(2).Shapes("Cargo")
With Cargo_Dup.Duplicate
.Name = "Cargo_1st"
.Left = 0
.Top = 540
End With
'CHEMICAL
If Input1 = "Chemical" Then
Set Chemical_Dup = ActivePresentation.Slides(2).Shapes("Chemical")
With Chemical_Dup.Duplicate
.Name = "Chemical" & 1
.Left = 36.74352
.Top = 540 + 0.36
End With
'''''WHERE PROBLEM ARISES'''''
ActivePresentation.Slides(2).Shapes("Cargo_1st").Select
ActivePresentation.Slides(2).Shapes("Chemical1").Select msoFalse
Set Vehicle = ActiveWindow.Selection.ShapeRange.Group
Vehicle.Name = "Vehicle"
'Elseif with a bunch for options where addition grouping occurs
1 ответ
Мне нужен какой-то макрос клавиатуры, чтобы напечатать это для меня:
Никогда ничего не выбирайте, если вам абсолютно не нужно. Вы почти никогда не должны.
Вы спрашиваете, как сделать вид активным, чтобы вы могли что-то выбрать. Я считаю, что это неправильный вопрос.
Полезнее знать, как работать с фигурами, БЕЗ их выбора. Группировать фигуры без их выбора немного сложно, но это можно сделать.
Вот пример того, как вы можете сделать это:
Sub GroupWithoutSelecting()
Dim oSl As Slide
Dim oSh As Shape
Dim aShapes() As String
Set oSl = ActivePresentation.Slides(2) ' or whichever slide you like
ReDim aShapes(1 To 1)
With oSl
For Each oSh In .Shapes
If oSh.Type <> msoPlaceholder Then ' can't group placeholders
' Substitute the real condition you want to use
' for selecting shapes to be grouped here
If oSh.Type = msoAutoShape Then
' add it to the array
aShapes(UBound(aShapes)) = oSh.Name
ReDim Preserve aShapes(1 To UBound(aShapes) + 1)
End If
End If
Next
' eliminate the last (empty) element in the array
ReDim Preserve aShapes(1 To UBound(aShapes) - 1)
' Create a shaperange from the array members and group the shaperange
.Shapes.Range(aShapes).Group
End With ' oSl
End Sub