单独显示/隐藏不同的自定义选项卡

时间:2015-06-02 08:04:00

标签: vb.net excel excel-vba vba

我有自定义功能区选项卡,我希望在给定事件时显示或隐藏其中一些选项卡。但我想单独显示/隐藏它们,因此标签不应相互依赖或类似。

我一直在尝试此documentation.this one中的示例,但没有成功。

这是标签的功能区XML:

<tab id="t1" label="CustomTab" getVisible="GetVisible" tag="xtab">
      <!-- some other elements -->
</tab>
<tab id="t2" label="CustomTab_2" getVisible="GetVisible" tag="xtab_2">
   <!-- some other elements -->
</tab>

和VB代码:

Private isVisible As Boolean = False

Public Sub GetVisible(control As Office.IRibbonControl, ByRef returnedVal As Boolean)
   returnedVal = isVisible
End Sub

Private Sub RefreshRibbon(Tag As String)
   ribbon.Invalidate()
End Sub

    Public Sub show_xtab(ByVal control As Office.IRibbonControl)
        isVisible = True
        Call RefreshRibbon(Tag:="xtab")
    End Sub

    Public Sub hide_xtab(ByVal control As Office.IRibbonControl)
        isVisible = False
        Call RefreshRibbon(Tag:="xtab")
    End Sub

在这里,我只尝试其中一个,至少让那个工作(然后我将负责动态传递Tag属性)。但这不起作用。

但是,如果我将GetVisible方法更改为以下内容:

Public Function GetVisible(control As Office.IRibbonControl)
    Return isVisible
End Function

它会起作用,但两个标签同时出现。我想分开控制它们。

有任何建议或教程吗?

更新:尝试了一些来自评论建议的解决方案

XML仍然是一样的。 VB代码:

Public MyTag as String

Sub GetVisible(control As Office.IRibbonControl, ByRef visible As Boolean)
    If control.Tag Like MyTag Then
        visible = True
    Else
        visible = False
    End If
End Sub

Private Sub RefreshRibbon(Tag As String)
    MyTag = Tag
    ribbon.Invalidate()
End Sub

Public Sub show_xtab(ByVal control As Office.IRibbonControl)
    Call RefreshRibbon(Tag:="xtab")
End Sub

Public Sub show_xtab_2(ByVal control As Office.IRibbonControl)
    Call RefreshRibbon(Tag:="xtab_2")
End Sub

但仍未成功......

2 个答案:

答案 0 :(得分:1)

好吧,它看起来很愚蠢,我不知道它为什么会这样,但解决方案如下 - 我刚刚将GetVisibleSub更改为Function并删除了visible参数,所以我直接返回TrueFalse,如下所示:

Public Function GetVisible(control As Office.IRibbonControl)
    If control.Tag Like MyTag Then
        Return True
    Else
        Return False
    End If
End Function

答案 1 :(得分:0)

正确的回调签名过程类型是 Sub,如果您从 GetVisible 回调签名中删除“As Boolean”,它会按预期工作。

此处签名:https://en.site.lt