Foxtable(狐表)用户栏目专家坐堂 → [求助] 批量设置功能区的状态按钮,怎么老是报错呢?


  共有2917人关注过本帖树形打印复制链接

主题:[求助] 批量设置功能区的状态按钮,怎么老是报错呢?

美女呀,离线,留言给我吧!
龙潭春早
  1楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:676 积分:4895 威望:0 精华:0 注册:2018/3/22 16:05:00
[求助] 批量设置功能区的状态按钮,怎么老是报错呢?  发帖心情 Post By:2019/4/27 19:13:00 [只看该作者]

想在主菜单的全局事件Click中,统一设置一下功能区A的一批状态按钮。

感觉没有错误,但是下面的代码怎么老是报错呢?

怎么改呢?

For Each g As RibbonMenu.Group In RibbonTabs("功能区A").Groups
    For Each itm As object In g.items
        If Typeof itm Is RibbonMenu.Togglebutton Then            
            If itm = e.Sender Then
                MainTable = Tables(itm.Name)                
                Dim tl As Table = Tables(itm.Name)
                For Each cl As Col In tl.Cols
                    cl.Visible = True
                Next                
                Tables(itm.Name).filter = ""
            End If
        End If
    Next
Next

显示这个,要怎么为类型定义运算符 “=” 呢?

图片点击可在新窗口打开查看此主题相关图片如下:状态按钮,批量设置出错 2019.04.27.png
图片点击可在新窗口打开查看


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/4/28 10:15:00 [只看该作者]

If itm.name = e.Sender.name Then

 回到顶部
美女呀,离线,留言给我吧!
龙潭春早
  3楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:676 积分:4895 威望:0 精华:0 注册:2018/3/22 16:05:00
  发帖心情 Post By:2019/4/28 14:24:00 [只看该作者]

嗯 问题解决了。

不过,甜老师,感觉 If itm = e.Sender Then 在语法上也对吧?

定义 itm 为当前触发事件的组件 e.Sender,怎么会出错呢?

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/4/28 14:48:00 [只看该作者]

 

两个对象之间,无法直接比较。只能比较它们的某些属性。

 

 


 回到顶部
美女呀,离线,留言给我吧!
龙潭春早
  5楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:676 积分:4895 威望:0 精华:0 注册:2018/3/22 16:05:00
  发帖心情 Post By:2019/4/28 16:44:00 [只看该作者]

哦 谢谢啦!

 回到顶部
美女呀,离线,留言给我吧!
龙潭春早
  6楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:676 积分:4895 威望:0 精华:0 注册:2018/3/22 16:05:00
  发帖心情 Post By:2019/4/30 19:38:00 [只看该作者]

【问题】
下面这段代码中,定义tb为功能区类型,并且遍历了功能区。

在Select Case e.tb.Name中,用 e.tb.Name 表示当前的功能区。

但是,在代码编辑器确认的时候,出现下面的问题。

为什么呢?     怎么解决呢?

图片点击可在新窗口打开查看此主题相关图片如下:定义的功能区tb不被接受.png
图片点击可在新窗口打开查看

【代码】
For Each tb As Ribbonmenu.Tab In RibbonTabs
    For Each g As RibbonMenu.Group In tb.Groups
        For Each itm As object In g.items
            Select Case e.tb.Name
                Case "功能区A"                    
                    If g.Name = tb.Groups("功能组A").Name Then
                         If itm.Name = e.Sender.Name Then
                              Forms("窗口1").open()
                              Forms("窗口1").text = "产品分类: " & e.Sender.Text ' 窗口个性化 !
                         End If
                    End If

                Case "功能区B", "功能区C"
                    MainTable = Tables(e.Sender.name)                    
                    For Each cl As Col In Tables(e.Sender.name).Cols
                        cl.Visible = True
                    Next
                    Tables(e.Sender.Name).filter = ""

            End Select            
        Next
    Next
Next

 回到顶部
帅哥,在线噢!
有点蓝
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110579 积分:562791 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/4/30 20:20:00 [只看该作者]

Select Case tb.Name

 回到顶部
美女呀,离线,留言给我吧!
龙潭春早
  8楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:676 积分:4895 威望:0 精华:0 注册:2018/3/22 16:05:00
  发帖心情 Post By:2019/4/30 22:54:00 [只看该作者]

之前就是按照 Select Case tb.Name 这么用的。

但是这段代码,放到主菜单的全局事件Click中之后,会出现混乱。

点击任何菜单按钮,都会执行打开以该按钮名称为表名的表,

相当于执行了 MainTable = Tables(e.Sender.Name)

比如,6楼 的 Case "功能区A" 下的那段代码,应该是只打开 “窗口1”

但是,打开窗口1后,还会同时执行 MainTable = Tables(e.Sender.Name),打开相应的表。

单击任何一个按钮,比如 “切换” 按钮,出现这个:

图片点击可在新窗口打开查看此主题相关图片如下:菜单上的按钮发生混乱-1.png
图片点击可在新窗口打开查看


每次点击确定后,都再次出现一次该截屏的内容,第二次点击确定后,出现:


图片点击可在新窗口打开查看此主题相关图片如下:菜单上的按钮发生混乱-2.png
图片点击可在新窗口打开查看


就是因为出现了上面的这些问题, 才想到是不是要用当前功能区 e.tb.Name,来强化界定 Case 的限制功能。

但是,为什么会出现这样的问题呢?

怎么解决呢?




[此贴子已经被作者于2019/4/30 22:59:09编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110579 积分:562791 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/4/30 23:07:00 [只看该作者]

For Each tb As Ribbonmenu.Tab In RibbonTabs
    Select Case tb.Name
        Case "功能区A"
            For Each g As RibbonMenu.Group In tb.Groups
                If g.Name = "功能组A" Then
                    For Each itm As object In g.items
                        
                        If itm.Name = e.Sender.Name Then
                            Forms("窗口1").open()
                            Forms("窗口1").text = "产品分类: " & e.Sender.Text ' 窗口个性化 !
                        End If  
                    Next
                End If
            Next

    End Select
Next


 回到顶部
美女呀,离线,留言给我吧!
龙潭春早
  10楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:676 积分:4895 威望:0 精华:0 注册:2018/3/22 16:05:00
  发帖心情 Post By:2019/4/30 23:24:00 [只看该作者]

嗯 之前也是这么单独设置的功能区代码。

后来要处理的功能区多了,都要对其中的按钮进行批量的设置,而按钮的处理方法也不一样。

所以,想用 6楼 的方法合成设置:

先统一遍历所有的功能区、功能组和项目,再用 Select Case 分别设置各个功能区。

这样能够节省每个功能区单独的遍历操作,减少代码和工作量。

唉,看样子是做不到了!

 回到顶部