Word另存为默认值和迭代



我尝试了许多不同的方法来实现这一点,但找不到适合应用程序的方法。

我有一个MS Word模板,将由另一个团队使用。

这是给我的标准。

  • 初始文件名必须是"PL"&文本控制框最右边的数字。它还应该说问题01
  • 用户必须能够选择保存位置
  • 如果用户稍后打开文档并保存,则应保留名称和路径
  • 如果用户"另存为",则应向上发出问题编号

我能最接近这项工作的是:-

在顶部,我有这样的内容:-Private WithEvents App As Word.ApplicationDim 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中已经介绍过了,例如这里。

最新更新