我有一个较长的代码,最后一部分中有一个ActiveX按钮,用于保存和关闭文件。另外,为了提高效率,我添加了一个vbYesNo
命令,用于根据使用的模板创建新文档。
代码:
Sub macrosave ()
Dim doc As Document
Dim strDosar As String
Dim Ret As Variant
Set doc = Application.ActiveDocument
strDosar = Range.Paragraphs(1).Range.Text
Ret = MsgBox("Do you want to create a new document?", vbYesNo)
If Ret = vbYes Then
Documents.Add Template:=ActiveDocument.AttachedTemplate.Path & Application.PathSeparator & ActiveDocument.AttachedTemplate.Name
End If
doc.SaveAs "\\server\Public\" & strDosar & ".doc", FileFormat:=wdFormatDocument = 0
doc.Close
End Sub
如果单击“是”,将创建一个新文档,最后一个文档将保存并随后关闭。
如果单击“否”,将保存活动文档,但此后不会关闭它。
我怀疑它与文件格式(wdFormatDocument
)有关,因为这样可以消除所有VBA代码。
文件格式是必需的,因为我想在保存文件后摆脱所有内容控件。
为什么在第二种情况下不执行doc.Close
,为达到目的我有什么选择?
答案 0 :(得分:0)
此参数无效: FileFormat:= wdFormatDocument = 0
也许:
Sub macrosave()
Dim doc As Document, strDosar As String, Ret As Variant
Set doc = ActiveDocument
strDosar = Split(doc.Range.Paragraphs(1).Range.Text, vbCr)(0)
Ret = MsgBox("Do you want to create a new document?", vbYesNo)
If Ret = vbYes Then Documents.Add Template:=doc.AttachedTemplate.FullName
doc.SaveAs "\\server\Public\" & strDosar & ".doc", FileFormat:=wdFormatDocument
doc.Close False
End Sub
答案 1 :(得分:0)
我认为问题出在文件扩展名doc
与指定的文件格式wdFormatDocument
之间。
从Word 2007开始,默认文件格式(wdFormatDocument
)指Word Open XML文件格式docx
。要保存为doc
文件格式,需要使用wdFormatDocument97
。之所以断断续续地工作,是因为该枚举的数值为0
。
尝试
doc.SaveAs "\\server\Public\" & strDosar & ".doc", FileFormat:=wdFormatDocument97
或将扩展名更改为docx
doc.SaveAs "\\server\Public\" & strDosar & ".docx", FileFormat:=wdFormatDocument
但是 docx
不会在下次打开文档时删除内容控件。 (doc
格式将因为内容控件是与新文件格式同时引入的,因此旧格式不支持它们。)
如果其他目的是“它消除了所有VBA代码”,则在将文档关闭为Normal.dotm之前,请更改附加的模板。这将删除指向附加模板的链接,并具有一个额外的优点,即无论以后谁打开它,文档都将“查找”其模板。 (当不存在附带的模板时,在某些情况下,它可能会使打开时间延迟相当长的时间。)
doc.AttachedTemplate = NormalTemplate
请注意,使用模板的FullName
波普尔来拾取文件路径也将变得更加简单:
Documents.Add Template:=ActiveDocument.AttachedTemplate.FullName