【问题标题】:Word Document created does not convert to PDF创建的 Word 文档无法转换为 PDF
【发布时间】:2025-11-28 22:50:02
【问题描述】:

生成的 Word 文档无法转换为 PDF

我生成了一个 Word 文档,从 excel 中填充了其中的书签,然后尝试导出为 PDF。即使在添加 Microsoft Word Library 16.0 后也不断出错。我在这里做错了什么?

选项显式

Sub GenerateTerminationLetter()

    Dim objWord As Object, docWord As Object
    Dim wb As Workbook
    Dim xlName As Name
    Dim Path, SavePath, TempPath, FileName3 As String
    Dim EmpFileName As String


        Set wb = ThisWorkbook

    ' ******************************* Primary Letter Template Location ***********************
    Sheets("FilePath").Select
        TempPath = Sheets("FilePath").Range("C16").Value
            If Right(TempPath, 1) <> "\" Then
                    TempPath = TempPath & "\"
                Else
            End If
        Path = TempPath & "Termination Letter (Redundancy A023 FPP) (NEW - With Whistle Blowing Statement).docx"

    '*******************************Populate Bookmarks ***************************************
    On Error GoTo ErrorHandler
     'Create a new Word Session
                Set objWord = CreateObject("Word.Application")
     'Open document in word
                Set docWord = objWord.Documents.Add(Path)
     'Loop through names in the activeworkbook
    For Each xlName In wb.Names
         'if xlName's name exists in the document then put the value at the bookmark
        If docWord.Bookmarks.Exists(xlName.Name) Then
            docWord.Bookmarks(xlName.Name).Range.Text = Range(xlName.Value)
        End If
    Next xlName
    Sheets("Temp").Visible = xlVeryHidden

    '******************************* Activate word and display document **********************

    With objWord
        .Visible = True
        .Activate
    End With
    'Save Termination Letter
    FileName3 = Sheets("R-Copy").Range("D7").Value
    '******************************* Export as PDF ********************************************
    docWord.ExportAsFixedFormat _
    Type:=xlTypePDF, _
    Filename:=EmpFolder & "\" & "Termination Letter_" & FileName3, _
    Quality:=xlQualityStandard, _
    IncludeDocProperties:=True, _
    ExportFormat:=wdExportFormatPDF


    objWord.Quit
    'Release the Word object to save memory and exit macro

    ErrorExit:
                Set objWord = Nothing
                Exit Sub

    'Error Handling routine


    ErrorHandler:

       If Err Then
          MsgBox "Error No: " & Err.Number & "; There is a problem. Contact Administrator"
             If Not objWord Is Nothing Then objWord.Quit False
                Resume ErrorExit
       End If
    End Sub

错误号 448:联系管理员

【问题讨论】:

  • 哪一行触发了错误?我假设它是 exportAsFixedFormat 行。错误 448 是未找到命名参数,看起来类型不是允许的参数之一。答案中包含更多信息和该方法参考的链接。

标签: vba compiler-errors pdf-generation


【解决方案1】:

哪一行触发了错误?我假设它是 exportAsFixedFormat 行。错误 448 是未找到命名参数,看起来类型不是允许的参数之一。您可能需要 ExportFormat:=wdExportFormatPDF,看起来您已经包含了它,但 Type 不是允许的参数,并且会导致错误。这是该方法的文档:https://docs.microsoft.com/en-us/office/vba/api/word.document.exportasfixedformat

看起来您使用的其他一些参数也不太正确,因为它们引用的是 xl 而不是 wd 类型,并且属性名称并不完全一致。试试:

docWord.ExportAsFixedFormat _
    OutputFileName:=EmpFolder & "\" & "Termination Letter_" & FileName3, _
    IncludeDocProps:=True, _
    ExportFormat:=wdExportFormatPDF

另外,我不相信你在任何地方设置 EmpFolder,所以它是一个空变量,这可能会导致方法失败或导致它将文件保存在错误的位置。

让我知道这是否适合你。

【讨论】:

  • 是的,你是对的。它是发生错误的 ExportFormat:=wdExportFormatPDF 。 EmpFolder 是在不同过程中定义的全局变量。我检查了 EmpFolder 确实保存了一个值并且不是空白的。
  • @SydneyNumpty 你有参考Microsoft Office Word 设置吗?否则你不能使用像wdExportFormatPDF 这样的枚举器这个词。您可以通过简单地将Òption Explicit(始终使用它)添加到代码所在模块的顶部来进行检查。如果之后出现错误(未定义变量),则必须通过将 values for those enums 定义为常量或将它们替换为它们的值来设置它们(不推荐)
【解决方案2】:
Sub BatchConvertDocxToPDF()

Dim objDoc1, objWord1 As Object
Dim strFile As String, strFolder, fp As String

'Initialization

 strFolder = EmpFolder & "\"
 strFile = Dir(strFolder & "*.docx", vbNormal)
 xp = strFolder & strFile


'Process each file in the file folder and convert them to pdf.

Dim objWord As Object
Dim objDoc  As Object

                Set objWord = CreateObject("Word.Application")
                objWord.Visible = True

  While strFile <> ""

                Set objDoc1 = objWord.Documents.Open(Filename:=strFolder & strFile)
                objDoc1.ExportAsFixedFormat _
                OutputFileName:=Replace(objDoc1.FullName, ".docx", ".pdf"), _
                ExportFormat:=wdExportFormatPDF, OpenAfterExport:=False, 
                OptimizeFor:=wdExportOptimizeForPrint, _
                Range:=wdExportAllDocument, Item:=wdExportDocumentContent

                objDoc1.Close
                strFile = Dir()
  Wend
       objWord.Visible = False
       Set objDoc1 = Nothing
       Set objWord = Nothing
  End Sub

【讨论】:

  • 上面的代码终于成功了。看起来我必须打开一个 Word 实例才能创建 PDF 文件。