Ms word 如何捕获用户在进入文件之前在Word 2013/Word 2016中保存未保存的文档>;另存为窗格?

Ms word 如何捕获用户在进入文件之前在Word 2013/Word 2016中保存未保存的文档>;另存为窗格?,ms-word,Ms Word,对于Word 2010中的未保存/新文档,当用户选择“文件>保存”或“文件>另存为”(或指向该事件的任何按钮或键盘快捷方式)时,将引发“Application DocumentBeforeSave”事件。 如果捕获此事件,则可以执行自定义保存操作,然后将“取消”设置为True,用户仍在查看文档,但从未见过任何单词“另存为dlg/窗格”等 在Word 2016中(大概也是在Word 2013中),只有当用户选择/单击“另存为”窗格中提供的任何链接时,才会引发DocumentBeforeSave事件

对于Word 2010中的未保存/新文档,当用户选择“文件>保存”或“文件>另存为”(或指向该事件的任何按钮或键盘快捷方式)时,将引发“Application DocumentBeforeSave”事件。 如果捕获此事件,则可以执行自定义保存操作,然后将“取消”设置为True,用户仍在查看文档,但从未见过任何单词“另存为dlg/窗格”等

在Word 2016中(大概也是在Word 2013中),只有当用户选择/单击“另存为”窗格中提供的任何链接时,才会引发DocumentBeforeSave事件。 此外,在捕获事件、执行自定义保存操作并将“取消”设置为“真用户”后,将保留“另存为”窗格。


任何人都有关于如何获得Word 2010行为的id?Word 2016:进入文件>选项>保存并勾选“打开或保存文件时不显示后台”:

要使用VBA测试此操作的效果,请执行以下操作:

创建类:

Public WithEvents wApp As Word.Application
Private Sub wApp_DocumentBeforeSave(ByVal wDoc As Document, _
   saveAsUi As Boolean, cancel As Boolean)
   If MsgBox("Save?", vbYesNo, "Custom save") = vbNo Then cancel = True
End Sub
创建模块:

Dim myClass As New Class1
Sub Test()
 Set myClass.wApp = Word.Application
End Sub
运行Test(),然后尝试使用Ctrl-S(或其他快捷方式)保存未保存的文档。现在您应该获得“自定义保存”dlg

如果未勾选“打开或保存文件时不显示后台”,则按Ctrl-S键应在后台显示文件>另存为选项卡(如问题中所述)

与使用我们自己的using ribbon(backstage)xml替换内置的另存为相比,此解决方案的改进之处在于,用户仍然可以使用File>Save As访问内置的另存为

现在,另一个问题是:根据哪个文档处于活动状态,是否可以将用户发送到内置文件>另存为


<>施泰因Tror < /P>我使用C++,而不是VSTO,在启动时加载一个C字词外加,这又会捕获文档的前驱事件。无论如何,这并不重要,如果你尝试使用VBA,你会发现完全相同的问题。我相信你的C#Word外接程序需要提供功能区XML来更改文件菜单,隐藏内置的SaveAs,并替换为调用你想要的代码的自定义SaveAs。使用功能区XML有问题(后台)要替换内置的SaveAs,这只能在Word实例启动时进行,并且不能在运行时进行更改。据我所知,在运行时不可能使用mso id(idMso)更改后台项目的可见性。是的,但如果您要替换它,这不重要吗?