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
Другие вопросы по тегам