微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MS Word vba可以将.docm保存为.docx,而无需转换活动文档

如何解决MS Word vba可以将.docm保存为.docx,而无需转换活动文档

我有一个带宏(.docm)的MS Word文档

基于许多StackOverflow帖子,我编写了一个宏以导出为pdf并另存为.docx

我打开/编辑.docm文档,该文档具有一个onSave宏,该宏将文档保存为.pdf格式和.docx格式,并分发给其他人使用。我将始终对.docm文档进行更改。

我的问题是,这样做会将活动(打开)文档从.docm转换为.docx,这样我就不再对.docm进行更改了。

Sub SaveActiveDocumentAsDocx()

    On Error GoTo Errhandler

    If InStrRev(ActiveDocument.FullName,".") <> 0 Then

        Dim strPath As String
        strPath = Left(ActiveDocument.FullName,InStrRev(ActiveDocument.FullName,".") - 1) & ".docx"
        ActiveDocument.SaveAs2 FileName:=strPath,FileFormat:=wdFormatDocumentDefault
        
    End If

    On Error GoTo 0

    Exit Sub

Errhandler:

    MsgBox "There was an error saving a copy of this document as DOCX. " & _
    "Ensure that the DOCX is not open for viewing and that the destination path is writable. Error code: " & Err

End Sub

我找不到任何参数来阻止在“ saveas”或“ saveas2”中进行的活动文档转换

此外,在“ saveas”命令之后,由于活动文档不再包含宏,因此不会执行原始宏中的任何其他行。我尝试在宏中添加行以重新打开原始的.docm,然后关闭.docx,但这些命令从未执行。

我希望我只是缺少一些简单的东西?

解决方法

Sub SaveAMacrolessCopyOfActiveDocument()
    ' Charles Kenyon 2 October 2020
    ' Save a copy of active document as a macrofree document
    '
    Dim oDocument As Document
    Dim oNewDocument As Document
    Dim iLength As Long
    Dim strName As String
    Set oDocument = ActiveDocument '  - saves a copy of the active document
    ' Set oDocument = ThisDocument '- saves copy of code container rather than ActiveDocument
    Let iLength = Len(oDocument.Name) - 5
    Let strName = Left(oDocument.Name,iLength)
    Set oNewDocument = Documents.Add(Template:=oDocument.FullName,DocumentType:=wdNewBlankDocument,Visible:=False)
    oNewDocument.SaveAs2 FileName:=strName & ".docx",FileFormat:= _
        wdFormatXMLDocument,LockComments:=False,Password:="",AddToRecentFiles _
        :=True,WritePassword:="",ReadOnlyRecommended:=False,EmbedTrueTypeFonts _
        :=False,SaveNativePictureFormat:=False,SaveFormsData:=False,_
        SaveAsAOCELetter:=False,CompatibilityMode:=15
    oNewDocument.Close SaveChanges:=False
    ' Clean up
    Set oDocument = Nothing
    Set oNewDocument = Nothing
End Sub

上面的代码创建并保存具有相同名称但为.docx格式的文档(无宏)的ActiveDocument副本。 .Add命令中的visible属性意味着它不会出现在屏幕上,并且会被该过程关闭。新文档将显示在“最近的文档”中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。