Поделиться через


Работа с фигурами (объектами-рисунками)

Фигуры (или объекты-рисунки) представлены тремя разными объектами: коллекцией Shapes, коллекцией ShapeRange и объектом Shape. Обычно используется коллекция Shapes для создания фигур и итерации по всем фигурам на слайде; объект Shape используется, если нужно изменить одну фигуру; коллекция ShapeRange используется, если нужно изменить несколько фигур, как при работе с несколькими выделенными фигурами в пользовательском интерфейсе.

Задание свойств для фигуры

Многие параметры форматирования фигур не устанавливаются с помощью свойств, применяемых непосредственно к объекту Shape или ShapeRange. Вместо этого связанные атрибуты фигур группируются во вспомогательных объектах, таких как объект FillFormat, который содержит все свойства, связанные с заливкой фигуры, или объект LinkFormat, который содержит все свойства, являющиеся уникальными для связанных объектов OLE. Чтобы задать свойства для фигуры, необходимо сначала вернуть объект, представляющий набор соответствующих атрибутов фигуры, а затем задать свойства этого возвращенного объекта. Например, можно использовать свойство Fill, чтобы вернуть объект FillFormat, а затем задать свойство ForeColor объекта FillFormat, чтобы настроить цвет заливки переднего плана для указанной фигуры, как показано в следующем примере.

Set myDocument = ActivePresentation.Slides(1)
myDocument.Shapes(1).Fill.ForeColor.RGB = RGB(255, 0, 0)

Применение свойства или метода к нескольким фигурам одновременно

В пользовательском интерфейсе есть некоторые операции, которые можно выполнять с несколькими выделенными фигурами. Например, можно выделить несколько фигур и одновременно настроить все их заливки. Существуют другие операции, которые можно выполнять только с одной выделенной фигурой. Например, вы можете изменять текст в фигуре, если выделена только одна фигура.

В Visual Basic есть два способа применения свойств и методов к наборам фигур. Эти два способа позволяют выполнять все операции, которые можно осуществить с отдельной фигурой, для диапазона фигур независимо от того, можно ли выполнять эту операцию в пользовательском интерфейсе.

  • Если операция применяется для нескольких выделенных фигур в пользовательском интерфейсе, вы можете выполнить аналогичную операцию в Visual Basic, создав коллекцию ShapeRange, содержащую нужные фигуры, и применив соответствующие свойства и методы непосредственно к коллекции ShapeRange.

  • Если операция не применяется для нескольких выделенных фигур в пользовательском интерфейсе, вы по-прежнему можете выполнить операцию в Visual Basic, осуществив циклический просмотр коллекции Shapes или коллекции ShapeRange, содержащей нужные фигуры, и применив соответствующие свойства и методы к отдельным объектам Shape в коллекции.

Многие свойства и методы, применяемые к объекту Shape и коллекции ShapeRange, завершаются ошибкой, если применяются к определенным типам фигур. Например, применение свойства TextFrame к фигуре, которая не может содержать текст, приводит к ошибке. Если вы не уверены, что ко всем фигурам в коллекции ShapeRange можно применить определенное свойство или метод, не применяйте это свойство или метод к коллекции ShapeRange. Если вы хотите применить одно из этих свойств или методов к коллекции фигур, нужно выполнить циклический просмотр коллекции и протестировать каждую отдельную фигуру, чтобы убедиться в соответствии ее типа перед применением к ней свойства или метода.

Применение свойства или метода к коллекции ShapeRange

Если вы можете выполнить в пользовательском интерфейсе операцию для нескольких выделенных фигур одновременно, можно выполнить аналогичное программное действие, создав коллекцию ShapeRange и затем применив к ней соответствующие свойства или методы. В следующем примере создается диапазон фигур, содержащий автофигуры Big Star (Большая звезда) и Little Star (Маленькая звезда) в myDocument, и к ним применяется градиентная заливка.

Set myDocument = ActivePresentation.Slides(1) 
Set myRange = myDocument.Shapes _ 
    .Range(Array("Big Star", "Little Star")) 
myRange.Fill.PresetGradient msoGradientHorizontal, _ 
    1, msoGradientBrass

Ниже приведены общие руководства по поведению свойств и методов при их применении к коллекции ShapeRange.

  • Применение метода к коллекции аналогично применению метода к каждому отдельному объекту Shape в этой коллекции.

  • Настройка значения свойства коллекции аналогична настройке значения свойства каждой отдельной фигуры в этом диапазоне.

  • Свойство коллекции, возвращающее константу, возвращает значение свойства для отдельной фигуры в коллекции, если все фигуры в коллекции имеют одинаковое значение для этого свойства. Если у фигур в коллекции разные значения свойства, возвращается "смешанная" константа.

  • Свойство коллекции, возвращающее простой тип данных (например, Long, Single или String), возвращает значение свойства для отдельной фигуры, если все фигуры в коллекции имеют одинаковое значение для этого свойства.

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

Предшествующие руководства также применяются при настройке свойств фигур, сгруппированных во вспомогательных объектах коллекции ShapeRange, например в объекте FillFormat. Если вспомогательный объект представляет операции, которые можно выполнять над несколькими выделенными объектами в пользовательском интерфейсе, можно вернуть объект из коллекции ShapeRange и настроить его свойства. Например, вы можете использовать свойство Fill, чтобы вернуть объект FillFormat, представляющий заливки всех фигур в коллекции ShapeRange. Настройка свойств этого объекта FillFormat задает такие же свойства для всех отдельных фигур в коллекции ShapeRange.

Циклический просмотр коллекций Shapes или ShapeRange

Даже если вы не можете выполнить операцию в пользовательском интерфейсе для нескольких фигур одновременно путем их выделения и использования команды, вы можете выполнить аналогичную программную операцию, осуществив циклический просмотр коллекции Shapes или коллекции ShapeRange, содержащей нужные фигуры, и применив соответствующие свойства и методы к отдельным объектам Shape в коллекции. В следующем примере выполняется циклический просмотр всех фигур в myDocument и добавление текста к каждой фигуре, являющейся автофигурой.

Set myDocument = ActivePresentation.Slides(1) 
For Each sh In myDocument.Shapes 
    If sh.Type = msoAutoShape Then 
        sh.TextFrame.TextRange.InsertAfter " (version 1)" 
    End If 
Next

В следующем примере создается коллекция ShapeRange, содержащая все фигуры, выделенные в активном окне, и задается текст в каждой фигуре коллекции, которая может содержать текст.

For Each sh in ActiveWindow.Selection.ShapeRange
    If sh.HasTextFrame Then
        sh.TextFrame.TextRange = "Initially selected"
    End If
Next

Выравнивание, распределение и группировка фигур в диапазоне фигур

Используйте методы Align и Distribute, чтобы разместить набор фигур относительно друг друга или относительно содержащего их документа. Используйте методы Group или Regroup, чтобы создать одну сгруппированную фигуру из набора фигур.

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.