vba - Excel VBA 尝试编辑组内形状的可见性

标签 vba excel excel-2013

我在 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。但我对数组很恐惧。所以我已经开始了,哈哈

最佳答案

有一种巧妙的方法可以隐藏/取消隐藏一组形状。假设我们在一张纸上有三个矩形,例如:

enter image description here

以下循环技术将起作用:

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/

相关文章:

excel - 无法在spring boot rest Controller 中的响应实体中获取excel文件

python - 如何比较两个 DF 中的两列并保持一些列常量并打印行?

excel - 使用 Excel 正确计算(和求和)分子量

vba - 帮助提高循环效率

vba - 在 Excel-VBA 中为整列添加撇号

excel - 对每个使用工作表引用

vba - 如何将excel单元格的一部分拆分为另一个单元格?

excel - 加载项无法通过自定义 UI 运行

vba - Excel VBA range.find 起作用

excel - 何时使用 range.value?