【问题标题】:How to trigger a macro with change of ribbon tab?如何通过更改功能区选项卡触发宏?
【发布时间】:2020-04-28 16:34:37
【问题描述】:

我有一个带有几个自定义功能区选项卡的 Excel 工作簿。单击特定的自定义功能区选项卡时,我想激活指定的工作表。

详情: 由 5 张工作表组成的工作簿具有以下附加功能区选项卡:“参数”和“数据分析”。每个选项卡都有几组控件。我需要添加一个触发器(宏?),它只会在用户选择“数据分析”选项卡时自动将工作表更改为 Sheet3(运行 ActiveWorkbook.Sheets("Sheet3").Activate)。

我将不胜感激。

【问题讨论】:

  • 也许您可以将代码添加到功能区选项卡的子元素的getVisible 回调中。激活其中一个选项卡时,您可能需要使其他选项卡无效。
  • 你能告诉我们解决这个问题的任何尝试吗?

标签: excel vba tabs ribbon


【解决方案1】:

可以使用功能区中的getVisible 回调来实现您正在寻找的内容。
这是一个标签的示例xml(它应该嵌套在CustomUIribbon标签中)

<tabs>
    <tab id="ExampleTab" label="Example Tab">
        <group id="ExampleGroup" 
            label="Example Group"
            getVisible="GetVisibility"
            tag="1"
            >
        </group>
    </tab>
</tabs>

当有人单击选项卡时,此xml 将在其所属的工作簿中调用GetVisibility 子。您可以使用tag 属性将变量传递给“Sub”。例如,每个选项卡都可以有自己的标签,也可以用于其他用途。

下面是GetVisibility 的示例代码:

Public Sub GetVisibility(Control As IRibbonControl, ByRef Visible)
    'your code to activate the worksheet can go here
     Visible = True 'if you want to make a control visible
     Select Case Control.Tag 'you can use Control.Tag to get a variable from ribbon
         Case "1"
         Case Else
     End Select
End Sub

唯一的问题是该代码通常只会在您第一次单击选项卡时调用。要让代码重新运行,我认为您需要使功能区控件无效。为此,您必须在初始化时将功能区存储在全局范围变量中。我上次检查时,您可能需要一个解决方法,例如将功能区地址存储在工作表中。 Stack 上有很多关于此的问题,例如:this one

【讨论】:

    猜你喜欢
    • 2020-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    • 2011-08-28
    相关资源
    最近更新 更多