Заполните весь контейнер сгруппированных фигур - Excel - PullRequest
1 голос
/ 05 февраля 2020

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

enter image description here

Любая помощь?

1 Ответ

0 голосов
/ 05 февраля 2020

Короче говоря, это невозможно в группе фигур.

Подробное объяснение:

С https://docs.microsoft.com/en-us/office/vba/api/excel.groupshapes

Объект GroupedShapes «Представляет отдельные фигуры внутри сгруппированной фигуры».

Поскольку сама группа представляет только фигуры внутри нее, она не имеет собственного цвета заливки, как такие, только цвета заливки фигур внутри него.

Итак, как я полагаю, вы обнаружили, что если вы делаете что-то вроде этого:

With Sheet1.Shapes(1).GroupItems.Parent
    .Fill.ForeColor.RGB = RGB(255, 0, 0)
End With

Затем вы говорите группе применить Forecolor к каждой фигуре в группе. , а не сам объект группы.

Если вы хотите, чтобы sh имел цвет фона для группы, то можно обойти это путем создания прямоугольника сзади и установки его цвета вместо этого.


Обновление: Пример временного решения

Если вы захотите sh реализовать предложенный мной обходной путь, то следующее поможет вам. Вам нужно будет настроить цвета / рабочую книгу / рабочий лист / имя группы фигур и т.д. c. Возможно, есть более красивый способ, но у меня есть эта работа ...

Const shapeGroupName As String = "ShapeGroup"
Const shapeGroupBGName As String = "ShapeGroupBG"
Const shapeGroupMargin As Single = 5

Dim x As Integer
Dim y As Integer
Dim h As Integer
Dim w As Integer

Dim shapeCount As Integer
Dim shapeCol() As String

With Sheet1.shapes.Range(Array(shapeGroupName))
    ReDim Preserve shapeCol(.GroupItems.Count)
    For shapeCount = 1 To .GroupItems.Count
        shapeCol(shapeCount) = .GroupItems.Item(shapeCount).Name
    Next

    y = .Top - shapeGroupMargin
    x = .Left - shapeGroupMargin
    h = .Height + shapeGroupMargin * 2
    w = .Width + shapeGroupMargin * 2
    .Ungroup
End With

shapeCol(0) = shapeGroupBGName
With Sheet1.shapes.AddShape(msoShapeRectangle, x, y, w, h)
    .Name = shapeGroupBGName
    .Fill.ForeColor.RGB = RGB(255, 0, 0)
    .Line.DashStyle = msoLineDashDot
    .ZOrder msoSendToBack
End With

With Sheet1.shapes.Range(shapeCol).Group
    .Name = shapeGroupName
End With

Это работает, получая размеры группы и имена форм внутри нее. Затем он разгруппирует фигуры, добавляет прямоугольник за существующими фигурами и затем соответствующим образом перегруппировывает.


Пара замечаний:

Я создал произвольный размер поля в качестве размеров группы на самом деле верхний левый и нижний правый объекты в нем. В Excel GUI добавляет немного больше к этому, так что вы можете установить это на то, что вы хотите.

Вы также можете реализовать другую форму (т. Е. Округленный прямоугольник вместо этого при желании и т. Д. c.).

Если у вас несколько групп фигур, то вышеприведенное можно легко изменить, чтобы приспособить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...