我正在尝试使用特定文件名保存Microsoft Word 2013文档。
我创建了一个客户填写的Word表单。
我正在使用以下内容:DEVELOPER->控件->纯文本内容控件DEVELOPER->控件->日期选择器内容控件DEVELOPER->控件->下拉列表内容控件
我想要一个宏,以表单中字段之一的名称保存文档。
示例:以下是可填写的内容字段。
client reference: A1B2-345
date: August 17, 2015
type: metadata
我想将文件另存为:
A1B2-345_17082015_metadata.DOCX
首先给每个控件一个Title
。您可以通过单击文档中的控件,然后在Properties
功能区上单击Developer
来执行此操作。 Properties
窗口的第一个字段是Title
。给您访问唯一标题所需的每个控件。在下面的示例中,我分别将MyText
,MyDate
和MyDrop
用作文本,日期和下拉控件。
然后您可以使用SelectContentControlsByTitle()
功能访问VBA中的每个控件。只要您使用的是唯一标题,此函数将返回仅包含单个控件的集合,因此我们可以从该集合中检索第一项(索引(1)
)。这是这样的样子:
Dim strText As String, strDate As String, strDrop As String
strText = ThisDocument.SelectContentControlsByTitle("MyText")(1).Range.Text
strDate = ThisDocument.SelectContentControlsByTitle("MyDate")(1).Range.Text
strDrop = ThisDocument.SelectContentControlsByTitle("MyDrop")(1).Range.Text
Range.Text
结尾是从控件中获取当前文本/值的地方。
现在您有了三条信息,您可以使用连接运算符(&
)将它们连接为一个字符串:
Dim strFilename As String
strFilename = strText & "_" & Format(strDate, "ddmmyyyy") & "_" & strDrop & ".docx"
最后,将其保存:
ThisDocument.SaveAs strFilename
请注意,如果您基于模板(.dotm)生成表单,则上面提供的代码将无法正常工作。包含ThisDocument.SelectContentControlsByTitle
的以下行需要更改为ActiveDocument.SelectContentControlsByTitle
否则代码将从内容控件中提取占位符文本。