【问题标题】:VBA macro using word SaveAs FileFormat:=wdFormatPDF creates .docxVBA 宏使用单词 SaveAs FileFormat:=wdFormatPDF 创建 .docx
【发布时间】:2018-11-25 16:08:59
【问题描述】:
wordTemplate = "c:\someTemplate.docx"
Set objWord = CreateObject("Word.Application")
objWord.Visible = True
objWord.documents.Add Template:=wordTemplate, NewTemplate:=False, DocumentType:=0

'''here I iterate and do stuffs, and then:'''


With objWord.ActiveDocument
    .SaveAs Filename:=("somePath" & "aName"), FileFormat:=wdFormatPDF
    .Close
End With
With objWord
    .Quit
End With

这会生成一个 .docx 文件。 ¿wdFormatPDF不应该给我一个PDF吗?

编辑: 我将 .SaveAs 行修改为:

.SaveAs Filename:=(Hoja1.Range("N6").Text & Hoja1.Range("A1") & ".pdf"), FileFormat:=wdFormatPDF

.SaveAs2 Filename:=(Hoja1.Range("N6").Text & Hoja1.Range("A1") & ".pdf"), FileFormat:=wdFormatPDF

但两者都会生成无法呈现的 .pdf 文件。

【问题讨论】:

    标签: excel pdf ms-word vba


    【解决方案1】:

    您得到什么取决于您作为“aName”传递的内容。例如,如果它包含 .docx 扩展名,您的 PDF 将具有无效的 .docx 扩展名。

    为此,您使用 SaveAs 还是 SaveAs2 没有区别。

    【讨论】:

    • 抱歉,将 .pdf 附加到文件名的末尾会生成无法可视化的损坏的 .pdf。
    【解决方案2】:

    您需要像这样使用SaveAs2 方法(经过测试并且可以正常工作):

    wordTemplate = "c:\someTemplate.docx"
    Set objWord = CreateObject("Word.Application")
    objWord.Visible = True
    objWord.documents.Add Template:=wordTemplate, NewTemplate:=False, DocumentType:=0
    
    '''here I iterate and do stuffs, and then:'''
    
    
    With objWord.ActiveDocument
    
        .SaveAs2 "C:\test\MyDoc.pdf", 17
    
        '.SaveAs Filename:=("c:\test\" & "test"), FileFormat:=wdFormatPDF
        .Close
    End With
    With objWord
        .Quit
    End With
    

    【讨论】:

    • 抱歉,将 .pdf 附加到文件名的末尾会生成无法可视化的损坏的 .pdf。
    【解决方案3】:

    好吧,我的问题与语法有关:

    这不起作用:

    .SaveAs Filename:=(Hoja1.Range("N6").Text & Hoja1.Range("A1") & ".pdf"), FileFormat:=wdFormatPDF
    

    虽然这样做了:

    .SaveAs (Hoja1.Range("N6").Text & Hoja1.Range("A1") & ".pdf"), 17
    

    那么问题是,在改变了之后,

    .Close
    

    在下一行中要求我保存对原始文档的更改(以前效果很好)。它迫使我明确放弃这样的更改:

    .Close _
            SaveChanges:=wdDoNotSaveChanges
    

    最终解决方案是:

    With objWord.ActiveDocument
        .SaveAs (Hoja1.Range("N6").Text & Hoja1.Range("A1") & ".pdf"), 17
        .Close _
            SaveChanges:=wdDoNotSaveChanges
    End With
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-09
      • 2018-09-14
      • 1970-01-01
      相关资源
      最近更新 更多