用于隐藏/取消隐藏图表/框的VBA代码

时间:2016-09-21 17:34:37

标签: excel vba excel-vba excel-2013

我写了一个vba代码来隐藏/取消隐藏我在活动工作表中的图表/列表框,我将其分配给“按钮”或者只是从excel中的“插入”选项卡中提取的形状。这段代码适用于1个形状,但我无法使用多个。我是VBA的新手,所以我不确定语法的所有细微差别。这就是我所拥有的:

Sub OverviewB()

    With ActiveSheet.Shapes("Rounded Rectangle 1").TextFrame2.TextRange.Characters

        If .Text = "Hide Overview" Then

            .Text = "Show Overview"

            ActiveSheet.Shapes("Chart 20", "List Box 1", "Chart 19", "List Box 3", "Chart 22", "List Box 4", "Chart 24", "List Box 5").Visible = False

        Else

            .Text = "Hide Overview"

                ActiveSheet.Shapes("Chart 20", "List Box 1", "Chart 19", "List Box 3", "Chart 22", "List Box 4", "Chart 24", "List Box 5").Visible = True



        End If
    End With
End Sub

我的图表/列表框名称中间确实有一个行分隔符“_”,因此它不是那么宽,但我把它拿出来是因为我认为它可能会导致一些错误。

有人能看到语法错误在哪里吗?我收到的错误是: “运行时错误450”:错误的参数数量或无效的属性分配。

1 个答案:

答案 0 :(得分:2)

错误消息为您提供了一些提示,错误的参数数量或无效的属性分配。您向.Shapes属性发送了太多参数。

Worksheet.Shapes property集合只接受一个参数并返回Shapes object,这是Shape objects的集合。来自dox,

  

使用Shapes(index),其中index是形状的名称或索引号,以返回单个Shape对象。

进一步说:

  

使用Shapes.Range(index),其中index是形状的名称或索引号或形状名称或索引号数组,以返回表示Shapes集合子集的ShapeRange集合

您需要在数组中设置元素并指定范围内的项目

 ActiveSheet.Shapes.Range(Array("Chart 20", "List Box 1", "Chart 19", "List Box 3", "Chart 22", "List Box 4", "Chart 24", "List Box 5")).Visible = True