在Word 2007中,“插入”功能区选项卡有一个“表”组,其中包含一个下拉按钮(标记为“表”)。
下拉列表包含各种菜单项,例如“Insert Table ...”,“Draw Table”等。但是,在下拉列表的顶部有一个10x8网格,您可以使用它快速选择使用鼠标的新表的大小。 (第一个问题:这件事叫什么?!!)。
我想覆盖默认行为,这样当用户使用上面提到的小部件“绘制”表格时,我可以更改表格中使用的段落样式(也许还可以进行其他清理)。
我知道如何覆盖“插入表...”命令,但我无法弄清楚如何覆盖“窗口小部件”的行为。可以吗?
答案 0 :(得分:3)
在您阅读之前(因为这将很长)我想说我没有解决这个问题。然而,在我试图解决 - 然后解决 - 这个问题时,我发现了很多东西,我在这里记录,希望它们能帮助其他人找到解决方案。
在尝试确定控制可用于插入表的10x8网格的内容时,我发现了名为“TableInsertGeneral”的Word命令中列出的宏。
根据Suzanne S. Barnhill的说法,如果此功能在早期版本的Word(Insert Table Drop Down Missing)中停止运行,此宏将恢复网格。 Word 2007/2010中存在的宏无法从宏对话框“运行”按钮执行。双击该命令会取消该对话框,但不会公开执行任何其他操作。我还试图通过创建一个名为TableInsertGeneral的VBA子来拦截它的函数,但是当我访问网格时,放入这个子的代码似乎没有被执行。但是,根据我的研究,我相信TableInsertGeneral宏确实与显示10x8网格有一些联系。
我还尝试通过更改Word功能区中的“表库”来解决此问题。因为我无法直接访问任何控制网格的代码,我试图隐藏表库,然后将其替换为排除网格功能的重建库(从而允许段落样式和其他更改全局工作)。
首先我下载了一些工具:
使用Microsoft Office的自定义UI编辑器(允许用户编辑Word 2007文档或模板中的customui.xml文件,而无需创建文件夹结构或维护xml文件之间的关系)我打开了一个模板并保存了此代码在文件中:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon>
<tabs>
<tab idMso="TabInsert">
<group idMso="GroupInsertTables" visible="false" />
<group id="CustomGroupInsertTables" label="Tables" insertBeforeMso="GroupInsertIllustrations">
<gallery id="CustomTableInsertGallery"
label="Table"
imageMso="TableInsertGallery"
size="large"
columns="1"
rows="4"
screentip="Table"
supertip="Insert or draw a table into the document."
keytip="T"
onAction="RibbonControl.galleryOnAction" >
<item id="GridMessage" label="Draw Table Via Grid Has Been Removed" imageMso="TablesGallery"
supertip="Provides information on why this template has different Ribbon controls."/>
<button idMso="TableInsertDialogWord" />
<button idMso="ConvertTextToTable" />
<button idMso="TableExcelSpreadsheetInsert" />
</gallery>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
这成功隐藏了原始的Tables库,并将其替换为原始Tables库的一些功能。 10x8网格消失了,但我无法恢复绘制表切换按钮和快速表库。据我所知,XML模式不允许将这些中的任何一个(存在于Word 2007的现成版本中)嵌入到现有库中。因为我不喜欢删除功能(即使对于我认为不会使用的部分解决方案),我添加了一个绑定到消息框的按钮作为重建库中的第一个项目:
用于连接新的“通过网格删除绘图表”按钮的代码放在名为RibbonControl的模块中:
Sub GalleryOnAction(Control As IRibbonControl, selectedID As String, selectedIndex As Integer)
If Documents.Count = 0 Then
MsgBox "This control is disabled when there is no active document."
Exit Sub
End If
Select Case Control.id
Case "CustomTableInsertGallery"
Select Case selectedIndex
Case 0
MsgBox "Explain changes to Ribbon interface here."
Case Else
'Do Nothing
End Select
End Select
End Sub
我不希望任何人使用这种部分解决方案,但是,如果可以实现恢复两个缺失控件的方法,这可能是一个很好的解决方法。顺便说一句,我从Greg Maxey的网站上调整了大部分内容:
如果你读到这里,谢谢!我希望你自己的努力能取得更大的成功。