Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
填充分组形状的整个容器-Excel_Excel - Fatal编程技术网

填充分组形状的整个容器-Excel

填充分组形状的整个容器-Excel,excel,Excel,我在Excel中创建了一些形状,将它们分组在一起,但我找不到如何在整个组中应用填充颜色。不是在形状上,而是在背景上 有什么帮助吗?简而言之,这在形状组上是不可能的 详细说明: 从 GroupedShapes对象”表示一个对象中的各个形状 分组形状。” 因为组本身只表示其中的形状,所以它没有自己的填充颜色,只有其中形状的填充颜色 所以,我猜你已经发现,如果你这样做: With Sheet1.Shapes(1).GroupItems.Parent .Fill.ForeColor.RGB =

我在Excel中创建了一些形状,将它们分组在一起,但我找不到如何在整个组中应用填充颜色。不是在形状上,而是在背景上


有什么帮助吗?

简而言之,这在形状组上是不可能的

详细说明:

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会为其添加一点额外的功能,因此您可以自行将其设置为所需的功能

您还可以实现不同的形状(例如,如果需要,可以改为圆角矩形等)


如果您有多个形状组,则可以轻松修改以上内容以适应此情况。

不客气。我认为这就提出了一个不同的问题来解决这个问题:你想知道如何在一个组中创建一个矩形,然后将它发送到其他对象的后面吗?不客气。我认为这提出了一个不同的问题来解决解决这个问题:你想知道如何在一个组中创建一个矩形,然后将它发送到其他对象的后面吗?