2013-05-24 2 views
1

У меня возникли трудности с использованием метода .Group на ShapeRange.Невозможно группировать некоторые фигуры в Powerpoint 2010

Например, я не могу группировать таблицу с текстовым полем и не могу группировать форму заголовка слайда с помощью текстового поля и т. Д. Я заметил, что Powerpoint не позволяет группировать определенные фигуры вместе, так как опция «Группа» отключена в контекстном меню:

Group is disabled for some shapes

Я стараюсь следующее VBA, который предсказуемо терпит неудачу:

Sub TestGroupShapes() 

    Dim sld As slide 
    Dim tb As Shape 
    Dim tb2 As Shape 
    Dim tbl As Shape 

    Set sld = ActivePresentation.Slides(1) 
    Set tbl = sld.Shapes.AddTable(3, 3, 100, 100, 100, 100) 
    tbl.Name = "Table" 
    Set tb = sld.Shapes.AddTextbox(msoTextOrientationHorizontal, 200, 200, 50, 50) 
    tb.Fill.Visible = msoCTrue 
    tb.Name = "TextBox1" 
    Set tb2 = sld.Shapes.AddTextbox(msoTextOrientationHorizontal, 300, 300, 50, 50) 
    tb2.Fill.Visible = msoCTrue 
    tb2.Name = "TextBox2" 

    '## This works. I am able to group two textbox shapes together: 
    sld.Shapes.Range(Array(tb2.Name, tb.Name)).Group 

    '## This fails, I am not able to group a shape with a Table 
    ' Also fails, e.g., if I try to group with the slide's Title shape, etc. 
    sld.Shapes.Range(Array(tbl.Name, tb.Name)).Group 


End Sub 

существуют ли какие-либо другие методы, которые я мог бы использовать для «связывания» определенных фигур вместе?

Обновление 5/25/2013

Проблема заключается в том, что формы, которые могут копировать пользователь (Ctrl + V/и т.д.) сохраняют ту же самую .Name в качестве исходной формы. Приложение, которое я разрабатываю, присваивает уникальным идентификаторам созданным им формам, но эти идентификаторы не останутся уникальными, если пользователь их копирует. Например, некоторый пользователь может «скопировать» существующее текстовое поле, а не вставить новый текстовое поле.

Поскольку приложение необходимо поддерживать и обновлять фигуры (таблицы, текстовые поля, диаграммы и т. Д.), Любая форма, созданная путем «копирования» существующей формы, может вызвать проблемы, поскольку мое приложение больше не будет чтобы определить, какие формы обновлять, удалять и т. д.

Что я надеялся сделать, это Group их вместе. Хотя это не безотказный (пользователь может по-прежнему вручную Ungroup их, но я чувствовал, что это было бы по крайней мере еще safegaurd.

+0

Мне нравится ваш вопрос ... к сожалению, я думаю, что невозможно сгруппировать таблицы :( –

+0

Я открываю это :) Мне любопытно, что невозможно группировать таблицы и другие фигуры или что определенные фигуры от этого метода не удается, но я не могу найти документацию о том, какие формы не могут быть сгруппированы, или почему они не могут быть сгруппированы :( –

ответ

1

Это не возможно сгруппировать некоторые формы в одной форме. Но вы можете использовать ShapeRange к связать различные типы фигур вместе. Затем некоторые свойства могут быть установлены в форме диапазона это сам, другой на конкретном изделии. НТН

Sub test() 

    Dim tableShape As Shape 
    Dim textboxShape1 As Shape 
    Dim textboxShape2 As Shape 
    Dim myShapeRange As ShapeRange 

    With ActivePresentation.Slides(1) 
     Set tableShape = .Shapes.AddTable(3, 3, 100, 100, 100, 100) 
     tableShape.Name = "Table" 

     Set textboxShape1 = .Shapes.AddTextbox(msoTextOrientationHorizontal, 200, 200, 50, 50) 
     textboxShape1.Name = "TextBox1" 

     Set textboxShape2 = .Shapes.AddTextbox(msoTextOrientationHorizontal, 300, 300, 50, 50) 
     textboxShape2.Name = "TextBox2" 

     Set myShapeRange = .Shapes.Range(Array("Table", "TextBox1", "TextBox2")) 
    End With 

    Call FormatShapes(myShapeRange) 

End Sub 

Private Sub FormatShapes(inputShapeRange As ShapeRange) 
    Dim shapeItem As Shape 

    With inputShapeRange 
     .Align msoAlignLefts, msoFalse 
     .AlternativeText = "My group 123" 
    End With 

    For Each shapeItem In inputShapeRange 
     With shapeItem 
      .Fill.Visible = msoTrue 
      .Fill.Solid 
      .Fill.ForeColor.RGB = RGB(255, 0, 0) 
      .Fill.TwoColorGradient msoGradientHorizontal, 1 
     End With 
    Next shapeItem 
End Sub 
+0

+1, но не совсем то, что мне нужно. Причина, по которой я пытаюсь группировать фигуры вместе имеет больше общего с опытом конечных пользователей, а не с тем, как мои скрипты взаимодействуют с фигурами. –

+0

Ага, я вижу. Может быть, вы могли бы назвать myShapeRange.Select? ... но не знаете, полезно ли это для пользователей. – dee

+0

Не думайте, что это действительно работает. Я обновил свой Q, чтобы более подробно описать, что я пытаюсь сделать, и почему. Любые другие предложения (то есть, что-то, что я мог бы сделать с модуль класса или «WithEvents» и т. д.)? –

0

Вот давно способ сделать это, но он будет работать (по крайней мере, это для меня: D).

Что вам нужно сделать, это сделать свой таблеток затем щелкните их правой кнопкой мыши отдельно; то, что вы хотите сделать, это сохранить ваши таблицы в качестве изображения (поскольку JPEG будет отлично работать для этого) либо на рабочем столе, либо в другом удобном файле. Затем поместите ваши столы (в виде рисунка) обратно в слайд. Теперь вы сможете объединить все свои вещи вместе.

Это ПИТА, но, по крайней мере, это сработает. Удачи!

+1

Это вряд ли является ответом на проблему с кодированием. –

+0

Это не жизнеспособное решение. –

1

Когда вы не можете группировать свои предметы, происходит какой-то сбой. Выполните следующие действия, чтобы «активировать функцию группы."Смотрите, если это поможет вам:

  1. Добавить новый слайд в презентацию (вы можете удалить его позже)
  2. Вставьте три формы трех различных цветов
  3. Устройте формы, чтобы попытаться группы (группу функция должна вернуться)
  4. Если это не возвращается, временное исправление - это щелчок правой кнопкой мыши по вашим 3 выбранным элементам, затем выберите параметр «Вставить изображение» (выглядит как доска для клипа и значок изображения вместе), это должно группировать элементы вместе

Надеюсь, это поможет!

Смежные вопросы