因此,我有一个带有宏的Word模板。我想实现什么?
保存文件后,我想将Word文件另存为具有新名称和新目的地的新docx文件。
当我单击“立即保存”时,该文件已经正确保存了新名称和新目的地(也作为* docx文件),但是该宏仍在其中,因此当我按“保存”时,该宏仍在执行(这就是我要删除)。
那么在将文件中的所有宏保存到新文件中时如何删除?
我当前的代码是:
Sub FileSave()
'
' saveFile Macro
'
'
DocDate = ActiveDocument.Tables(1).Cell(4, 2)
GCCName = ActiveDocument.Tables(1).Cell(8, 1)
FileExtension = ".docx"
matchedStr = GCCName & " - " & DocDate & FileExtension
matchedStr = Replace(matchedStr, "", "")
matchedStr = Replace(matchedStr, Chr(13), "")
ActiveDocument.Save
ChangeFileOpenDirectory "########\"
ActiveDocument.SaveAs2 FileName:= _
matchedStr, FileFormat:= _
wdFormatXMLDocument, LockComments:=False, Password:="", _
AddToRecentFiles:=True, WritePassword:="", ReadOnlyRecommended:=False, _
EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, SaveFormsData _
:=False, SaveAsAOCELetter:=False, CompatibilityMode:=15
End Sub
答案 0 :(得分:0)
如果您有Word模板(点),则不应打开该模板来创建文档:您应该从头开始就创建一个新文档。如果新文档是通过代码生成的,则使用Documents.Add
而不是Documents.New
。新文档将包含 no 宏,并且可以毫无问题地保存为docx。
这几天,可以将模板文件保存为带有docx扩展名的文件以及“无宏文档”文件格式-可以使用。 (在Word的早期版本中,*。dot文件格式没有。)
但是,文档仍将具有指向模板的链接,并能够通过该链接“查看”宏。这可能就是为什么您认为宏被保存在docx文档中的原因。如果将此类文件“搬出”(发送到无法访问其所在文件夹中的模板的位置),则宏将不显示或不可用。
如果要完全将文档与其模板分离,请将其附加到其他模板(通常是Normal.dotm,因为在所有Word安装中都可用)。基于问题代码的示例:
ActiveDocument.AttachedTemplate = NormalTemplate
这必须在代码的末尾,因为它会将其与执行操作的代码分离。
问题代码的提示:使用ActiveDocument
可能不可靠-不能确定它始终是预期的文档(例如,用户可以激活另一个文档)。一种更可靠的方法是使用Document
对象。这同样适用于其他事物,例如表。例如:
Dim doc as Word.Document
Dim tbl as Word.Table
Set doc = ActiveDocument
' do things with the document...
Set tbl = doc.Tables(1)
' do things with the table
DocDate = tbl.Cells(4,2).Range.Text
GCCName = tbl.Cell(8, 1).Range.Text
doc.Save
答案 1 :(得分:-1)
替代docm文件,取自我的项目
NameNoExtension是新文件的名称。将您的路径放在我的代码中SelectSaveDir()的位置。该代码将打开该代码所在文件的副本,删除所有vba模块并将复制的文件另存为docx。
Sub SaveCopyAsDocx(ByVal NameNoExtension As String)
Dim NewDocument As Object
Set NewDocument = Documents.Add(ThisDocument.FullName)
Dim Modul As Object
For Each Modul In NewDocument.VBProject.VBComponents
If Modul.Name <> "ThisDocument" Then
NewDocument.VBProject.VBComponents.Remove Modul
End If
Next
NewDocument.SaveAs SelectSaveDir() & "\" & NameNoExtension & ".docx"
End Sub