在ActiveX按钮上单击捕获工作表名称

时间:2017-01-24 16:17:38

标签: excel vba pivot pivot-table togglebutton

我在下面的代码非常有效。我只是想知道是否有更好的方法来获取工作表名称。

场景:我有“x”工作表,带有“n”切换按钮。每个切换按钮通过隐藏的切片器控制工作表中显示的数据。要切换的数据只是零和1,所以当单击切换按钮时,我会显示/隐藏“1”。

代码:

  Private Sub tgl_btn_Click()
    Set InputSheet = Worksheets("My Worksheet")
    Call do_filter("myvalue", tgl_btn.Value, "PivotTable1")   
 End Sub

do_filter将切换按钮的名称以及值和数据透视表名称作为隐藏/取消隐藏数据透视表中值的模块。

因此,在模块调用之前,工作表上的每个切换按钮都包含以下行:

Set InputSheet = Worksheets("My Worksheet")

有没有办法拿起这个工作表名称,而无需在每次点击按钮时将其硬编码到逻辑中?

原因:用户重命名工作表,因此终止了切换按钮功能。

1 个答案:

答案 0 :(得分:3)

  

原因:用户重命名工作表

是的,用户擅长打破脆弱的VBA代码 - 非常实际上很好!

有时你可以解决ActiveSheet - 这很棒。但有时你需要获得一个特定的工作表,并使用它的Name会让你遇到同样的问题:用户会破坏它们。

Project Explorer (Ctrl + R)中找到并选择工作表,然后查看属性工具窗口(F4) - 注意Name属性匹配用户可以突发奇想改变的名称:

My Awesome Sheet

另请注意,有一个(Name)属性,此处的值为Sheet1。这是工作表的CodeName。 VBA使用该标识符定义全局范围的对象变量,因此您可以这样做:

Set inputSheet = Sheet1

无论用户使用什么重命名工作表,它都能正常工作。