Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用VBA显示/隐藏图纸上的特定对象组_Vba - Fatal编程技术网

使用VBA显示/隐藏图纸上的特定对象组

使用VBA显示/隐藏图纸上的特定对象组,vba,Vba,在我的工作表上,我有: 3个设置按钮 3个菜单按钮 每个菜单按钮6个子菜单按钮 单击一个菜单按钮时: 它对应的子菜单按钮应该是可见的 所有其他子菜单按钮应不可见 菜单按钮应保持可见 设置按钮应保持可见 我使用以下命名约定: 菜单按钮:菜单01、菜单02、菜单03 子菜单按钮:01\u Sub1、02\u Sub1、03\u Sub1。。。01_Sub6、02_Sub6、03_Sub6 我已经这样做了,所以菜单编号可以用作子菜单按钮的标志 我几乎通过以下方式实现了这一目标: Sub OpenM

在我的工作表上,我有: 3个设置按钮 3个菜单按钮 每个菜单按钮6个子菜单按钮

单击一个菜单按钮时:

  • 它对应的子菜单按钮应该是可见的
  • 所有其他子菜单按钮应不可见
  • 菜单按钮应保持可见
  • 设置按钮应保持可见
我使用以下命名约定: 菜单按钮:菜单01、菜单02、菜单03 子菜单按钮:01\u Sub1、02\u Sub1、03\u Sub1。。。01_Sub6、02_Sub6、03_Sub6

我已经这样做了,所以菜单编号可以用作子菜单按钮的标志 我几乎通过以下方式实现了这一目标:

Sub OpenMenu()
Dim sObject As Shape
For Each sObject In ActiveSheet.Shapes
If Not InStr(sObject.Name, flagMenuID & "Sub") = 0 Then sObject.Visible = True
If Not InStr(sObject.Name, flagMenuID & "Sub") = 1 Then sObject.Visible = False

Next sObject

End Sub
虽然这确实成功地显示了正确菜单的子菜单按钮并隐藏了其他子菜单按钮,但它似乎也使所有菜单按钮和设置按钮不可见

有谁能建议我应该如何修改此代码以更正此问题吗?我理解这可能有点混乱,所以如果您有任何问题,请提问,我将很乐意帮助您


感谢您的时间和努力

flagMenuId是如何声明的,它现在有什么值?Sub-Menu()flagMenuId=Replace(ActiveSheet.Shapes(Application.Caller).Name,“Menu”、“”)和“”调用OpenMenu-End如果End子菜单的末尾,它应该有“01”、“02”、“03”你有没有试过在潜艇上设置一个断点并观察它的行为?检查变量的值(如flagMenuID)是否有其预期值?使用VisualBasic编辑器的各种调试功能对任何程序员来说都是非常有价值的。您只需要在隐藏之前进行一些额外的测试。类似于
If InStr(sObject.Name,flagMenuID&“Sub”)1和sObject.Name(如“*_Sub*”)然后sObject.Visible=False的类似于
flagMenuID是如何声明的,此时它有什么值?Sub-Menu()flagMenuID=Replace(ActiveSheet.Shapes(Application.Caller).Name,“Menu”,“”)和“”调用OpenMenu-End If-End-If-End-subhere,它应该具有的值是“01_uu”、“02_uu”或“03_uu”。您是否尝试在接头上设置断点并观察其行为?检查变量的值(如flagMenuID)是否有其预期值?使用VisualBasic编辑器的各种调试功能对任何程序员来说都是非常有价值的。您只需要在隐藏之前进行一些额外的测试。类似于
如果InStr(sObject.Name,flagMenuID和“Sub”)1和sObject.Name类似于“*\u Sub*”则sObject.Visible=False