Excel VBA试图编辑组内形状的可见性

我在Excel 2013中创build了一个项目,它基于表单顶部单元格中的数据显示并隐藏了大量形状(networking图标和文本框)列表。 我的目标是为我创build一个graphics用户界面来inputnetworking信息,当我input数值到它填充到下面的networking图中的单元格。 我有这一切的工作,但我去绘画的每一个形状(可见和隐藏)组成一个大集团,所以我可以复制/粘贴到演示文稿的权力点。 但是,一旦我分组的形状,我得到一个运行时错误“438”:对象不支持此属性方法。

我试图find一种方法来继续pipe理这些领域,但只是在一个巨大的群体。 任何帮助将是伟大的! 哦,主组形状的名称是“Group10”。

这是我必须在input信息时更新networkingdevise的代码的快速示例。 袒护我,我不是最好的编码器。 另外我从一个离线系统手动input,所以介意type-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 

我也尝试着去创build一个我称之为x的所有已知形状的数组。 然后制作一个filter,只将形状复制到一个新的数组,y,如果形状是可见的。 然后复制y。 但是我对数组很恐怖。 所以我有这个LOL

有一个很好的方法来隐藏/取消隐藏一组形状。 假设我们在一张纸上有三个矩形,例如:

在这里输入图像说明

以下循环技术将工作:

 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 

要访问组中的Shape,可以使用像这样的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