我在下面的代码非常有效。我只是想知道是否有更好的方法来获取工作表名称。
场景:我有“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")
有没有办法拿起这个工作表名称,而无需在每次点击按钮时将其硬编码到逻辑中?
原因:用户重命名工作表,因此终止了切换按钮功能。
答案 0 :(得分:3)
原因:用户重命名工作表
是的,用户擅长打破脆弱的VBA代码 - 非常实际上很好!
有时你可以解决ActiveSheet
- 这很棒。但有时你做需要获得一个特定的工作表,并使用它的Name
会让你遇到同样的问题:用户会破坏它们。
在 Project Explorer (Ctrl + R)中找到并选择工作表,然后查看属性工具窗口(F4) - 注意Name
属性匹配用户可以突发奇想改变的名称:
另请注意,有一个(Name)
属性,此处的值为Sheet1
。这是工作表的CodeName
。 VBA使用该标识符定义全局范围的对象变量,因此您可以这样做:
Set inputSheet = Sheet1
无论用户使用什么重命名工作表,它都能正常工作。