无法完全拦截或捕获SaveAs对话框

时间:2017-02-17 12:32:02

标签: vba ms-word word-vba

在网络的帮助下,我已经能够编写一些VBA来检查Word 2013模板文档上的内容控件,并在保存保存时使用内容创建文件名选择时,使用具有相应名称的自定义子例程:

Sub FileSave()
    If Left(ActiveDocument.Name, 4) = "PDR " Then
        ActiveDocument.Save
    Else
        Call FileSaveAs
    End If
End Sub

Sub FileSaveAs()
    ' too much to list, but in essence it 
    ' checks contents of content controls
    ' and if properly populated build a string to use as a filename 
    ' with the standard ActiveDocuments.SaveAs2 command
End Sub

当使用功能区中的标准保存按钮时,以及使用保存<时,使用[Ctrl]+S /按[F12]的键盘方法时,代码可以正常工作/ em>来自文件菜单。

但是,如果用户选择菜单选项并选择File \ Save As...(即看起来像这样的那个 - standard Word file menu choice),那么我的FileSaveAs()例程中的代码似乎被绕过,我们得到一个正常的另存为对话框,其中文档中的前几个单词被建议为文件名(即标准的Word行为)。

如何捕获菜单方法?

或者,我确实考虑过使用 CommandBars autonew()子例程中的“文件”菜单中禁用“另存为...”,但我无法使其工作。我研究过的网站表明,从Word 2010开始,这种情况就不复存在了。

1 个答案:

答案 0 :(得分:0)

我发现在Office 2007之后,您需要使用自定义UI编辑器来操作文件的XML。

然后我发现Office 2013以后的某些关键词发生了变化(当左上角的“Office”按钮被“文件”菜单替换时)。此链接不仅允许您下载自定义UI编辑器,还提供了Office 2010,2013和2016之间命令的细微详细信息:http://www.rondebruin.nl/win/s2/win005.htm

虽然上面的页面指的是Excel,但它似乎在整个Office中很常见。我用它来改变Word 2013文件,以便从“文件”菜单中成功隐藏“另存为”。下面是我用来解决我的特定问题的相关XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
    <backstage>
        <tab idMso="TabSave" visible="false" />
    </backstage>
</customUI>