【问题标题】:Add custom tab in the ribbon在功能区中添加自定义选项卡
【发布时间】:2020-07-22 08:39:11
【问题描述】:

我正在努力学习新东西。我根据 Siddharth Rout 的教程创建了一个自定义选项卡。 XML部分是这样的

<customUI onLoad="RibbonOnLoad" xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon startFromScratch="false">
<tabs>
<tab id="MyCustomTab" label="MyTab" insertAfterMso="TabView">
<group id="customGroup1" label="First Tab">
<button id="customButton1" label="JG Button 1" imageMso="HappyFace" size="large" onAction="Callback1" />
<button id="customButton2" label="JG Button 2" imageMso="PictureBrightnessGallery" size="large" onAction="Callback2" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>

然后在工作簿模块中,我输入此代码以便在工作簿打开时激活选项卡

Private myRibbon As IRibbonUI

Sub OnLoad(ribbon As IRibbonUI)
Set myRibbon = ribbon
myRibbon.ActivateTabMso ("MyTab")
End Sub

但是当我打开工作簿时,我遇到了错误Can't run the macro RibbonOnLoad。我正在使用 Office 365 32 位和 Windows 10 64 位。

【问题讨论】:

  • 首先,CustomUI 的 OnLoad 和 OnAction 项指定将被调用的 VBA 方法的名称。因此,您的 'Sub OnLoad(....' 方法确实需要是 'Sub RibbonOnLoad(...)
  • 我尝试了RibbonOnLoad 并保存了关闭的 wb,然后我得到了同样的错误。我试图更改myRibbon.ActivateTab ("MyTab") 并删除了so 部分,保存了一个关闭然后我得到了同样的错误。
  • 您在使用 CustomUI 编辑器吗? github.com/OfficeDev/office-custom-ui-editor
  • 抱歉正在看电视剧。这就是为什么我建议创建一个问题而不是在 cmets 中跟进的原因。这样,任何在线并且可以回答的人都会回答您的问题。很高兴解决了! :)
  • @SiddharthRout 非常感谢。我真的很喜欢并喜欢你的精彩帖子。

标签: excel vba


【解决方案1】:

首先,正如freeflow 已经提到的,回调应该是RibbonOnLoad。其次,您应该使用 ActivateTab 方法,因为它是一个自定义选项卡。第三,您应该指定控件 ID,而不是选项卡名称。试试下面的代码,需要放在正则模块中...

Private myRibbon As IRibbonUI

'Callback for customUI.onLoad
Sub RibbonOnLoad(ribbon As IRibbonUI)

    Set myRibbon = ribbon
    myRibbon.ActivateTab "MyCustomTab"

End Sub

【讨论】:

  • 将代码放在标准模块或ThisWorkbook打开事件中会更好吗?目前我把它放在 Workbook Open 事件中。
  • 当我把它放在 Workbook Open 中时,我得到了同样的错误。然后我尝试了其他方法,就是将代码放在标准模块中,并将 Private 转换为 Public。这有效,没有错误,但我没有激活自定义选项卡。
  • 非常感谢。现在解决了。如果使用选项卡 ID 而不是选项卡名称,我错过了这句话。但是如果我需要使用 Tab 名称怎么办?
  • 您可以设置一个 Select Case 语句来返回并分配一个变量对应的控件 ID。然后您可以将变量传递给 ActivateTab 方法。
  • 不过,在这种情况下,我认为它不实用。 RibbonOnLoad 在打开工作簿时自动运行。因此,您要么硬编码选项卡名称,要么提示用户。但是,如果您要对选项卡名称进行硬编码,为什么不直接使用 ID。或者,如果您要提示用户,它的实用性如何?
猜你喜欢
  • 2015-04-15
  • 1970-01-01
  • 2018-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-14
相关资源
最近更新 更多