我在 Excel 2013 中创建了一个项目,该项目根据工作表顶部单元格中的数据显示和隐藏大量形状(网络图标和文本框)。我的目标是创建一个 GUI 来输入网络信息,当我将值输入单元格时,它会填充到下面的网络图形中。我已经完成了这一切,但我将绘图的每个形状(可见和隐藏)分组为一个大组,以便我可以将其复制/粘贴到 power point 中进行演示。但是,一旦我对形状进行分组,我就会收到运行时错误“438”:对象不支持此属性方法。
我正在尝试找到一种方法来继续管理这些领域,但只是在一个庞大的集团内。任何帮助都会很棒!哦,主组形状的名称是“Group10”。
这是我在输入信息时必须更新网络设计的代码的快速示例。另外,我是从离线系统手动输入的,所以请注意 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
我还尝试创建一个由所有已知形状组成的数组,我称之为 x。然后创建一个过滤器,仅将 x 中的形状复制到新数组 y 中(如果形状可见)。然后复制 y。但我对数组很恐惧。所以我已经开始了,哈哈
最佳答案
有一种巧妙的方法可以隐藏/取消隐藏一组形状。假设我们在一张纸上有三个矩形,例如:
以下循环技术将起作用:
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
关于vba - Excel VBA 尝试编辑组内形状的可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35977412/