我在excel 2013中创建了一个项目,该项目根据工作表顶部单元格中的数据显示和隐藏大量形状(网络图标和文本框)。我的目标是为我创建一个GUI来输入网络信息,当我将值输入到它填充到下面的网络图中的单元格中时。我把这一切都搞定了,但我把绘图的每个形状(可见和隐藏)组合成一个大组,这样我就可以将它复制/粘贴到功率点进行演示。但是,一旦我对形状进行分组,我就会收到运行时错误''对象不支持此属性方法。
我正试图找到一种方法来继续管理这些字段,但只是在一个巨大的群体中。任何帮助都会很棒!哦,主组形状的名称是' Group10'。
这是我在输入信息时更新网络设计的代码的快速示例。我也是从离线系统手动输入这个,所以请注意类型-os。
Private Sub WorkSheet_Change (ByVal Target As Range)
If Range("s26").Value <> "" And Range("g26").Value <> "" Then
ActiveSheet.Shapes("cloud1-group-p1").Visible = True
ActiveSheet.Shapes("router1-group-p1").Visible = True
ActiveSheet.Shapes("line1-group-p1").Visible = True
Else
ActiveSheet.Shapes("cloud2-group-p3").Visible = False
End If
End Sub
我还试图了解如何创建一个我称为x的所有已知形状的数组。然后制作一个过滤器,只在形状可见的情况下,将x中的形状复制到一个新数组y中。然后复制y。但我对阵列很恐怖。所以我对LOL有所了解
答案 0 :(得分:3)
隐藏/取消隐藏一组形状有一种巧妙的方法。假设我们在一张纸上有三个矩形,如:
以下循环技术将起作用:
Sub dural2()
ary = Array("Rectangle 1", "Rectangle 2", "Rectangle 3")
For Each a In ary
ActiveSheet.Shapes(a).Visible = True
Next a
End Sub
工作得很好。然而,试图将它们视为一个群体:
Sub dural()
ary = Array("Rectangle 1", "Rectangle 2", "Rectangle 3")
ActiveSheet.Shapes(ary).Visible = True
End Sub
会失败。避免循环的正确方法是使用ShapeRange
:
Sub dural3()
Dim shr As ShapeRange, s As Shape
Dim ary()
i = 1
For Each s In ActiveSheet.Shapes
ReDim Preserve ary(1 To i)
ary(i) = s.Name
i = i + 1
Next s
Set shr = ActiveSheet.Shapes.Range(ary)
shr.Visible = True
End Sub
答案 1 :(得分:0)
要访问组内的形状,请使用GroupItems
这样的
Sub Demo()
Dim ws As Worksheet
Dim ShapeGroup As Shape
Dim AShape As Shape
Set ws = ActiveSheet
Set ShapeGroup = ws.Shapes("Group10")
Set AShape = ShapeGroup.GroupItems("ShapeToHide")
AShape.Visible = False
End Sub