使用SaveAs2保存时,如何从字文件中删除宏?

时间:2019-02-08 08:45:46

标签: vba ms-word word-vba

因此,我有一个带有宏的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

2 个答案:

答案 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