在 MS Word 中使自定义功能区 UI 无效
Invalidate Custom Ribbon UI in MS Word
我在 MS Word 中创建了一个自定义选项卡,它构成了文档检查过程的一部分。在流程开始时,会打开一个用户表单,您可以添加 x 数量的电子邮件,以便稍后在检查流程中使用。
想法是让自定义标签动态更新显示相应的编号。在用户表单中输入电子邮件的按钮数量。
我已经编辑了 XML 并且据我所知拥有所有必需的功能但是当我尝试调用 Reintialise() 以使 UI 在用户表单完成后无效时:
Public MyRibbon As IRibbonUI
Public Declare PtrSafe Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByRef destination As Any, ByRef source As Any, ByVal length As Long)
Public Sub MyAddInInitialize(Ribbon As IRibbonUI)
Set MyRibbon = Ribbon
ActiveDocument.Variables.Add("RibbonAddress") = CStr(ObjPtr(Ribbon))
End Sub
Function GetRibbon(ByVal lRibbonPointer As LongPtr) As Object
Dim objRibbon As Object
CopyMemory objRibbon, lRibbonPointer, LenB(lRibbonPointer)
Set GetRibbon = objRibbon
Set objRibbon = Nothing
End Function
Sub btnCheck_getVisible(control As IRibbonControl, ByRef returnedVal)
'If condition to toggle getVisible callback from VBA that works
End Sub
Sub Reintialise()
If MyRibbon Is Nothing Then
Set MyRibbon = GetRibbon(ActiveDocument.Variables("RibbonAddress"))
MyRibbon.Invalidate
Else
MyRibbon.Invalidate
End If
End Sub
当运行试图将功能区信息写入到多变的。如果在 sub reintialise
中它只有 MyRibbon.Invalidate 我收到错误“运行-time error '91': Object Variable or With Block Variable not set' 这显然来自 MyRibbon 未定义。
我试图调用 MyAddInIntialise 来重新定义对象 MyRibbon 以及将 'Ribbon' 存储为文档变量以供稍后调用,但到目前为止,我的方法 none 有效。
XML 按钮示例:
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="MyAddInIntialize">
<ribbon>
<tabs>
<tab id="customTab" label="Checking" insertAfterMso="TabReviewWord">
<group id="startGov" label="Governance Progress Overview">
<button id="emailCheck1" label="Send Document to First Checker" size="large"
onAction="send_email" getVisible="btnCheck_getVisible"
getEnabled="btn_trigger" imageMso="AppointmentColor1"/>
</group>
</tab>
</tabs>
</ribbon>
你有任何丝带 UI 错误吗?
默认情况下,如果 add-in 尝试操作 Microsoft Office 用户界面 (UI) 但失败,则不会显示任何错误消息。但是,您可以将 Microsoft Office 应用程序配置为显示与 UI 相关的错误消息。您可以使用这些消息来帮助确定自定义功能区未显示的原因,或者显示功能区但未显示控件的原因。
要显示 VSTO Add-in 用户界面错误,您需要:
- 启动应用程序。
- 单击
File
选项卡。
- 点击
Options
。
- 在类别窗格中,单击
Advanced
。
- 在详细信息窗格中,select
Show VSTO Add-in user interface errors
,然后单击 OK
。
有关详细信息,请参阅 How to: Show Add-in user interface errors。
确保 Office 应用程序调用的 MyAddInInitialize
方法和对象已正确初始化。
我在 MS Word 中创建了一个自定义选项卡,它构成了文档检查过程的一部分。在流程开始时,会打开一个用户表单,您可以添加 x 数量的电子邮件,以便稍后在检查流程中使用。
想法是让自定义标签动态更新显示相应的编号。在用户表单中输入电子邮件的按钮数量。
我已经编辑了 XML 并且据我所知拥有所有必需的功能但是当我尝试调用 Reintialise() 以使 UI 在用户表单完成后无效时:
Public MyRibbon As IRibbonUI
Public Declare PtrSafe Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByRef destination As Any, ByRef source As Any, ByVal length As Long)
Public Sub MyAddInInitialize(Ribbon As IRibbonUI)
Set MyRibbon = Ribbon
ActiveDocument.Variables.Add("RibbonAddress") = CStr(ObjPtr(Ribbon))
End Sub
Function GetRibbon(ByVal lRibbonPointer As LongPtr) As Object
Dim objRibbon As Object
CopyMemory objRibbon, lRibbonPointer, LenB(lRibbonPointer)
Set GetRibbon = objRibbon
Set objRibbon = Nothing
End Function
Sub btnCheck_getVisible(control As IRibbonControl, ByRef returnedVal)
'If condition to toggle getVisible callback from VBA that works
End Sub
Sub Reintialise()
If MyRibbon Is Nothing Then
Set MyRibbon = GetRibbon(ActiveDocument.Variables("RibbonAddress"))
MyRibbon.Invalidate
Else
MyRibbon.Invalidate
End If
End Sub
当运行试图将功能区信息写入到多变的。如果在 sub reintialise
中它只有 MyRibbon.Invalidate 我收到错误“运行-time error '91': Object Variable or With Block Variable not set' 这显然来自 MyRibbon 未定义。
我试图调用 MyAddInIntialise 来重新定义对象 MyRibbon 以及将 'Ribbon' 存储为文档变量以供稍后调用,但到目前为止,我的方法 none 有效。
XML 按钮示例:
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="MyAddInIntialize">
<ribbon>
<tabs>
<tab id="customTab" label="Checking" insertAfterMso="TabReviewWord">
<group id="startGov" label="Governance Progress Overview">
<button id="emailCheck1" label="Send Document to First Checker" size="large"
onAction="send_email" getVisible="btnCheck_getVisible"
getEnabled="btn_trigger" imageMso="AppointmentColor1"/>
</group>
</tab>
</tabs>
</ribbon>
你有任何丝带 UI 错误吗?
默认情况下,如果 add-in 尝试操作 Microsoft Office 用户界面 (UI) 但失败,则不会显示任何错误消息。但是,您可以将 Microsoft Office 应用程序配置为显示与 UI 相关的错误消息。您可以使用这些消息来帮助确定自定义功能区未显示的原因,或者显示功能区但未显示控件的原因。
要显示 VSTO Add-in 用户界面错误,您需要:
- 启动应用程序。
- 单击
File
选项卡。 - 点击
Options
。 - 在类别窗格中,单击
Advanced
。 - 在详细信息窗格中,select
Show VSTO Add-in user interface errors
,然后单击OK
。
有关详细信息,请参阅 How to: Show Add-in user interface errors。
确保 Office 应用程序调用的 MyAddInInitialize
方法和对象已正确初始化。