VBA代码来隐藏/取消隐藏图表/框

我写了一个vba代码来隐藏/取消隐藏我分配给“button”的活动工作表中的图表/列表框,或者只是从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”:错误数量的参数或无效的财产assingment。

错误消息给你一些提示, 错误的参数数量或无效的财产assingment。 您正在向.Shapes属性发送太多参数。

Worksheet.Shapes属性集合只接受一个参数,并返回一个Shapes对象 ,它是Shape对象的集合。 从dox,

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

并进一步:

使用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