我已经自定义Office功能区,方法是通过创建自定义XML文件向Word功能区添加新标签。自定义位于Word启动目录中的模板中。我正在使用Word2016。它在Word 2016下工作;但是在Word 2010中不起作用。在Word 2010中打开文档时,出现可怕的“隐藏模块错误”消息。经过数小时的调试和研究,我无法在VBA代码中找到此错误的原因。 公司中的所有用户都应使用Word 2016,但是我必须假定某些用户仍将使用Word 2010。 如果用户使用Word 2010打开文档,则我不希望显示自定义选项卡,也就是说,我不希望触发OnLoad事件。 我在OnLoad事件回调中尝试了以下代码:
If Application.Version = "16" Then
Set myribbon = ribbon
Else
End
End If
在其他回调(如ToggleOn Action,getlabel,getTag,GetImage)中,我检查了Word版本,如下所示:
Public Sub…
If Application.Version = "16" then
Do callback code
Else
End
End If
End Sub
但是,功能区始终会加载,而我找不到阻止它加载的方法。我也相信您不能使用VBA在功能区上隐藏自定义选项卡。 为了解决这个问题,我做了以下工作: 我将模板放在启动目录中,以检查Word的正确版本。如果找到了正确的版本,它将从用户模板目录中加载一个模板作为加载项,并带有功能区自定义项和我的VBA代码。 它可以工作,但是这意味着我必须向用户分发两个模板。理想情况下,我只想分发一个模板。 是否有一种方法可以启用或阻止OnLoad事件触发,即根据检测到的Word版本显示自定义选项卡?
答案 0 :(得分:1)
使用getVisible回调。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon>
<tabs>
<tab id="tab1" label="CUSTOM" getVisible="OnGetTabVisible">
<group id="group1" label="Group1">
<button idMso="SaveAll" label="Save All" size="large"/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
Sub OnGetTabVisible(ctrl As IRibbonControl, returnVal)
If Val(Application.Version) = 14 Then
returnVal = False
Else
returnVal = True
End If
End Sub
更新
我建议以下资源: