Короче говоря, это невозможно в группе фигур.
Подробное объяснение:
С 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.).
Если у вас несколько групп фигур, то вышеприведенное можно легко изменить, чтобы приспособить это.