我写了一个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”:错误的参数数量或无效的属性分配。
答案 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