【发布时间】:2018-07-03 21:48:25
【问题描述】:
我目前正在使用 VBA 和宏在 excel 2016 中构建仪表板。它基本上涉及在单个工作表上选择按钮以显示/隐藏其数据源将链接到另一个工作表的不同图表元素。到目前为止进展顺利,但我遇到了效率问题。第一个问题与对象分组有关,第二个问题与 vba 代码的重复有关。
1) 有没有办法跨组形状对象?现在看来,我必须为不可见的对象创建副本,并且每个父对象组都将被隐藏。不幸的是,我找不到 Excel 跨组的方法。因此,如果我想要 A 组和 B 组以及 A 组和 C 组,我显然只能拥有一个组(A&B 或 A&C,但不能同时拥有)。这迫使我复制对象,所以我有一对用于 A&B,另一对用于 A&C。问题是当我得到几个仪表板按钮和子部分时,正确组织我的对象会变得非常乏味和噩梦。
2) 谁能建议我如何使以下代码更高效,以免重复代码?它基本上突出显示了一组形状,这些形状必须根据按下的按钮显示和隐藏。但是现在,我必须编写所有必须保持可见和隐藏的组。下面是代码示例。请参阅下面的 True 和 False 参数以了解问题所在:
Sub Pic_1_SA_click()
ActiveSheet.Shapes("Group 23").Visible = True
ActiveSheet.Shapes("Group 71").Visible = False
ActiveSheet.Shapes("Group 19").Visible = False
ActiveSheet.Shapes("Group 20").Visible = False
End Sub
Sub Pic_1_SB_click()
ActiveSheet.Shapes("Group 23").Visible = False
ActiveSheet.Shapes("Group 71").Visible = True
ActiveSheet.Shapes("Group 19").Visible = False
ActiveSheet.Shapes("Group 20").Visible = False
End Sub
Sub Pic_2_SA_click()
ActiveSheet.Shapes("Group 23").Visible = False
ActiveSheet.Shapes("Group 71").Visible = False
ActiveSheet.Shapes("Group 19").Visible = True
ActiveSheet.Shapes("Group 20").Visible = False
End Sub
Sub Pic_2_SB_click()
ActiveSheet.Shapes("Group 23").Visible = False
ActiveSheet.Shapes("Group 71").Visible = False
ActiveSheet.Shapes("Group 19").Visible = False
ActiveSheet.Shapes("Group 20").Visible = True
End Sub
对于这两个问题的任何指导将不胜感激。谢谢!
【问题讨论】:
-
代码审查/效率请求属于codereview.stackexchange.com。
-
我们中的许多人在防火墙后面看不到图片 - 请发布您的实际代码。对于您最初的问题 - 在代码中将对象保存在形状数组中,然后隐藏/取消隐藏数组中的每个元素。
-
感谢您的建议。我在看数组。我也编辑了 OP 以直接显示代码。