填充分组形状的整个容器-Excel
我在Excel中创建了一些形状,将它们分组在一起,但我找不到如何在整个组中应用填充颜色。不是在形状上,而是在背景上填充分组形状的整个容器-Excel,excel,Excel,我在Excel中创建了一些形状,将它们分组在一起,但我找不到如何在整个组中应用填充颜色。不是在形状上,而是在背景上 有什么帮助吗?简而言之,这在形状组上是不可能的 详细说明: 从 GroupedShapes对象”表示一个对象中的各个形状 分组形状。” 因为组本身只表示其中的形状,所以它没有自己的填充颜色,只有其中形状的填充颜色 所以,我猜你已经发现,如果你这样做: With Sheet1.Shapes(1).GroupItems.Parent .Fill.ForeColor.RGB =
有什么帮助吗?简而言之,这在形状组上是不可能的 详细说明: 从 GroupedShapes对象”表示一个对象中的各个形状 分组形状。” 因为组本身只表示其中的形状,所以它没有自己的填充颜色,只有其中形状的填充颜色 所以,我猜你已经发现,如果你这样做:
With Sheet1.Shapes(1).GroupItems.Parent
.Fill.ForeColor.RGB = RGB(255, 0, 0)
End With
然后,您告诉组对组内的每个形状应用前景色
,而不是组对象本身
如果您希望为组设置背景色,那么解决方法是在后面创建一个矩形,并设置该矩形的颜色
更新:解决方案示例 如果您希望实现我建议的解决方法,那么以下内容将帮助您实现。您将需要调整颜色/工作簿/工作表/形状组名称等。可能有一个更漂亮的方法,但我有这个工作
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会为其添加一点额外的功能,因此您可以自行将其设置为所需的功能 您还可以实现不同的形状(例如,如果需要,可以改为圆角矩形等)
如果有多个形状组,则可以轻松修改上述内容以适应此情况。简而言之,在形状组上不可能这样做 详细说明: 从 GroupedShapes对象”表示一个对象中的各个形状 分组形状。” 因为组本身只表示其中的形状,所以它没有自己的填充颜色,只有其中形状的填充颜色 所以,我猜你已经发现,如果你这样做:
With Sheet1.Shapes(1).GroupItems.Parent
.Fill.ForeColor.RGB = RGB(255, 0, 0)
End With
然后,您告诉组对组内的每个形状应用前景色
,而不是组对象本身
如果您希望为组设置背景色,那么解决方法是在后面创建一个矩形,并设置该矩形的颜色
更新:解决方案示例 如果您希望实现我建议的解决方法,那么以下内容将帮助您实现。您将需要调整颜色/工作簿/工作表/形状组名称等。可能有一个更漂亮的方法,但我有这个工作
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会为其添加一点额外的功能,因此您可以自行将其设置为所需的功能 您还可以实现不同的形状(例如,如果需要,可以改为圆角矩形等)
如果您有多个形状组,则可以轻松修改以上内容以适应此情况。不客气。我认为这就提出了一个不同的问题来解决这个问题:你想知道如何在一个组中创建一个矩形,然后将它发送到其他对象的后面吗?不客气。我认为这提出了一个不同的问题来解决解决这个问题:你想知道如何在一个组中创建一个矩形,然后将它发送到其他对象的后面吗?