2016-09-21 114 views
0

我写了一个vba代码来隐藏/取消隐藏我分配给“按钮”的活动工作表中的图表/列表框,或者只是从Excel中的“插入”选项卡。此代码适用于1形状,但我无法使其与多个工作。我是VBA的新手,所以我不确定所有的语法细节。下面是我有:隐藏/取消隐藏图表/框的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

指定的项目它已经我已经好久没做过任何的Excel编程,但我认为你需要Shapes.Range(... )。 ActiveSheet.Shapes只是给你一个集合,你需要从它创建一个Range对象。 – Mick

回答

2

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

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

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

并进一步:

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

你需要设置在数组中的元素和范围内

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 
+0

太棒了。很好的信息,谢谢 – DukeLuke

+0

当我点击它时,我怎么可以将这个形状调暗,并在第二次点击时将它恢复正常颜色 – DukeLuke

+0

谢谢大卫,下次我会再深入讲述:) @DukeLuke我不太确定生命周期的对象认为点击事件,您需要深入了解这一点。提示:Google处理Shapes上的单击事件。 – Sgdva