我尝试了许多不同的方法来实现这一点,但找不到适合应用程序的方法。
我有一个MS Word模板,将由另一个团队使用。
这是给我的标准。
- 初始文件名必须是"PL"&文本控制框最右边的数字。它还应该说问题01
- 用户必须能够选择保存位置
- 如果用户稍后打开文档并保存,则应保留名称和路径
- 如果用户"另存为",则应向上发出问题编号
我能最接近这项工作的是:-
在顶部,我有这样的内容:-Private WithEvents App As Word.Application
和Dim n as long
然后在新文档中我有:-
Private Sub Document_New()
Set App = Word.Application
n = 0
End Sub
然后对于执行,我已经这样做了:-
Private Sub App_DocumentBeforeSave(ByVal Doc As Document, SaveAsUI As Boolean, Cancel As Boolean)
ActiveDocument.SaveAs2 "PL" & Right(ActiveDocument.SelectContentControlsByTitle("Works Order Number").Item(1).Range.Text, 5) & " Issue " & Format(n, "00") & ".docx", wdFormatDocumentDefault
End Sub
但是,这会在用户选择位置之前保存。它可以工作,但用户需要选择位置。所以我试过了,这只是做了同样的事情。
Private Sub App_DocumentBeforeSave(ByVal Doc As Document, SaveAsUI As Boolean, Cancel As Boolean)
If Cancel = False Then
n = n + 1
ActiveDocument.SaveAs2 "PL" & Right(ActiveDocument.SelectContentControlsByTitle("Works Order Number").Item(1).Range.Text, 5) & " Issue " & Format(n, "00") & ".docx", wdFormatDocumentDefault
ElseIf Cancel = True Then
Exit Sub
End If
End Sub
欢迎任何建议或帮助。我基本上只是想建议每次保存为时会出现问题的文件名。但如果不进行物理保存,我找不到影响这一点的方法。
提前感谢您的时间和支持。
您可以重新调整功能区控件(Save(的用途,以便首先调用事件处理程序。此外,如果需要,您可以取消事件处理程序中的默认操作。有关详细信息,请参见临时重新调整Office Fluent功能区上的命令的用途。重新调整功能区控件的用途会给你带来很大的好处——相应的键盘快捷键也会由你的代码处理。因此,您将能够通过相同的代码截取键盘快捷键。
在Backstage UI的情况下,您可以隐藏SaveAs
按钮并添加自己的按钮。在以下文章中阅读更多关于Backstage UI的信息:
- 面向开发人员的Office 2010后台视图简介
- 在Office 2010后台视图中自定义列的布局
您确实需要学习如何使用VBA的联机文档。如果您查找了DocumentBeforeSave
,您就会了解到,当事件被触发时,Cancel
始终是False
。如果在事件处理程序中将其设置为True
,则会取消保存。
您需要在显示对话框之前拦截保存,但只有在对话框之后才会触发事件。因为Save
的标准是使用标准功能,所以它只是您需要截取的FileSaveAs
。
在实现Backstage视图(文件选项卡(之前,只需创建一个名为FileSaveAs
的例程就可以解决这个问题。你仍然可以这样做,它会拦截键盘快捷键或点击QAT按钮。但它不会拦截后台命令。只有事件才能在不重建Backstage视图的情况下做到这一点,而且该事件对您不起作用。。。
至于拦截对话框以设置初始文件名,这在SO中已经介绍过了,例如这里。