Работа с фигурами (объектами-рисунками)
Фигуры (или объекты-рисунки) представлены тремя разными объектами: коллекцией 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 и обратная связь.