2014-12-04 4 views
0

У меня есть библиотека из восьми изображений на слайде PowerPoint. На основе ввода пользовательской формы некоторые компоненты дублируются и переименовываются путем добавления «1» или «2» после имени исходного изображения, чтобы они были дифференцируемыми. Затем я хочу сгруппировать новые изображения (я создаю элемент из изображений компонентов). Я могу дублировать изображения и выстраивать их правильно, но у меня возникают проблемы с их группировкой. Обратите внимание: я не всегда группирую одно и то же количество элементов, это зависит от пользовательских входов.Powerpoint VBA Сделайте дублированный вид формы активным, чтобы выбрать для группировки

Я получаю сообщение об ошибке «Форма (неизвестный элемент): неверный запрос. Чтобы выбрать фигуру, ее представление должно быть активным».

Я искал и пытался реализовать несколько стратегий на форумах справки, но прихожу пустым.

ПОЖАЛУЙСТА, ПОМОГИТЕ !!!

Кевин

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

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 
+0

Показать код. Как мы можем знать, что проблема без этого? –

+0

Код, добавленный в вопрос @TimWilliams – KevinJ25

ответ

0

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

Никогда не выбирайте что-либо, если вам абсолютно не нужно. Вам почти никогда не приходится.

Вы спрашиваете, как сделать вид активным, чтобы вы могли что-то выбрать. Я считаю, что это неправильный вопрос.
Полезно знать, как работать с фигурами БЕЗ выбора. Группировка фигур без их выбора немного сложна, но это можно сделать.

Вот пример того, как вы могли бы идти об этом:

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 
+0

Я не понимаю вашего комментария «Заменить реальное условие, которое вы хотите использовать для выбора фигур, которые будут сгруппированы здесь». Я не уверен, как я буду применять то, что мне нужно сделать Вот. «Cargo_1st» всегда будет сгруппирован, но тогда это может быть «Chemical1» или «Other1», все в зависимости от того, что пользователь вводит в какую фигуру дублировать. Я хочу иметь возможность группировать новый элемент, дублированный в блоках «If Input1 =» Chemical «Then» и «ElseIF». – KevinJ25

+0

Поскольку вы не объяснили логику того, что сгруппировано, я не могу предложить правильный код, но, например, вы могли бы построить массив строк с каждым элементом, содержащим имя одной из форм, которые нужно сгруппировать, затем вместо If oSh.Type = msoAutoShape заменить вызов функции, которая проверяет, является ли oSh.Name также членом массива. –

+0

После некоторой работы и добавления некоторых избыточных строк проверки ввода я смог заставить группу работать! Кажется немного кругом, но он работает и работает, поэтому я в порядке. Мне также удалось выяснить, как назвать мою новую группу. БЛАГОДАРЯ!! – KevinJ25