为从模板打开的每个文档设置 Office 功能区中的默认选项卡
Set the default tab in Office ribbon for every document opened from a template
我创建了一个带有自定义 XML 功能区的 Word 模板,我将其设置为从该模板创建文档时的默认功能区。
我在代码中有:
Public myRibbon
Sub Onload(ribbon As IRibbonUI)
'Creates a ribbon instance for use in this project'
Set myRibbon = ribbon
myRibbon.ActivateTab ("CustomTab1")
End Sub
这对于从模板创建的第一个文档非常有用,但是如果打开了一个文档并且我开始了一个新文档,则新文档不会在选定的选项卡上打开。我试过添加:
Sub AutoNew()
myRibbon.ActivateTab ("CustomTab1")
End Sub
我试过这个:
Sub AutoNew()
myRibbon.Invalidate
myRibbon.ActivateTab ("CustomTab1")
End Sub
但都不起作用。我该如何解决?
我发现以编程方式创建功能区比它值得的麻烦更多。相反,我使用 XML 方法。有几种免费的编辑器可用,其中一种叫做 Office Custom UI Editor.
网上教程很多,这里就不一一列举了。只需搜索 'custom ribbon xml' 或类似内容。
下面是一些用于创建自定义选项卡的基本 XML 代码:
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon startFromScratch="false">
<tabs>
<tab id="customTab" label="CustomTab1">
<group id="grpCustomTab" label="CustomGroup1">
<button id="btnCustomButton" label="A custom button" imageMso=" ShapeSmileyFace" size="large" onAction="ACallBack" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>
这里重要的是onAction="ACallBack"
和buttonID
。 onAction 参数是单击按钮时将调用的子。每个按钮都应该有相同的 onAction sub,带有这个特殊的签名:
Sub ACallBack(control As IRibbonControl)
您可以调用任何有效的 sub,但它必须具有 IRibbonControl
参数。 buttonID 是您用来调用正确的 sub 的内容。假设您有 ID 为 ID1、ID2 和 ID3 的按钮。您的代码可能如下所示:
Sub ACallBack(control As IRibbonControl)
Application.Run CStr(control.ID)
End Sub
Sub ID1
MsgBox "This is sub 1"
End Sub
Sub ID2
MsgBox "This is sub 2"
End Sub
Sub ID3
MsgBox "This is sub 3"
End Sub
使用这种方法,所有基于模板的文档都将自动显示您的自定义功能区。
如果您已经打开了基于此模板的文档,则该模板中的功能区已经加载,这就是不会触发 OnLoad 事件的原因。
没有通过代码激活选项卡的可靠方法。
但是,可能有不需要任何代码的解决方案。当基于您的模板创建新文档时,观察哪个选项卡被激活。
如果它是“主页”选项卡,您只需将选项卡放在“主页”选项卡之前即可激活您的选项卡。
您可以通过编辑功能区 xml 使其看起来像这样:
<tab id="tabCustom" insertBeforeMso="TabHome" label="My Custom Tab">
如果不是“主页”选项卡,那你就不走运了!
我创建了一个带有自定义 XML 功能区的 Word 模板,我将其设置为从该模板创建文档时的默认功能区。
我在代码中有:
Public myRibbon
Sub Onload(ribbon As IRibbonUI)
'Creates a ribbon instance for use in this project'
Set myRibbon = ribbon
myRibbon.ActivateTab ("CustomTab1")
End Sub
这对于从模板创建的第一个文档非常有用,但是如果打开了一个文档并且我开始了一个新文档,则新文档不会在选定的选项卡上打开。我试过添加:
Sub AutoNew()
myRibbon.ActivateTab ("CustomTab1")
End Sub
我试过这个:
Sub AutoNew()
myRibbon.Invalidate
myRibbon.ActivateTab ("CustomTab1")
End Sub
但都不起作用。我该如何解决?
我发现以编程方式创建功能区比它值得的麻烦更多。相反,我使用 XML 方法。有几种免费的编辑器可用,其中一种叫做 Office Custom UI Editor.
网上教程很多,这里就不一一列举了。只需搜索 'custom ribbon xml' 或类似内容。
下面是一些用于创建自定义选项卡的基本 XML 代码:
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon startFromScratch="false">
<tabs>
<tab id="customTab" label="CustomTab1">
<group id="grpCustomTab" label="CustomGroup1">
<button id="btnCustomButton" label="A custom button" imageMso=" ShapeSmileyFace" size="large" onAction="ACallBack" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>
这里重要的是onAction="ACallBack"
和buttonID
。 onAction 参数是单击按钮时将调用的子。每个按钮都应该有相同的 onAction sub,带有这个特殊的签名:
Sub ACallBack(control As IRibbonControl)
您可以调用任何有效的 sub,但它必须具有 IRibbonControl
参数。 buttonID 是您用来调用正确的 sub 的内容。假设您有 ID 为 ID1、ID2 和 ID3 的按钮。您的代码可能如下所示:
Sub ACallBack(control As IRibbonControl)
Application.Run CStr(control.ID)
End Sub
Sub ID1
MsgBox "This is sub 1"
End Sub
Sub ID2
MsgBox "This is sub 2"
End Sub
Sub ID3
MsgBox "This is sub 3"
End Sub
使用这种方法,所有基于模板的文档都将自动显示您的自定义功能区。
如果您已经打开了基于此模板的文档,则该模板中的功能区已经加载,这就是不会触发 OnLoad 事件的原因。
没有通过代码激活选项卡的可靠方法。
但是,可能有不需要任何代码的解决方案。当基于您的模板创建新文档时,观察哪个选项卡被激活。
如果它是“主页”选项卡,您只需将选项卡放在“主页”选项卡之前即可激活您的选项卡。 您可以通过编辑功能区 xml 使其看起来像这样:
<tab id="tabCustom" insertBeforeMso="TabHome" label="My Custom Tab">
如果不是“主页”选项卡,那你就不走运了!