簡體   English   中英

Excel 到字到 PDF 使用 VBA

[英]Excel to Word to PDF using VBA

背景:在 StackOverflow 的幫助下,我成功地找到了一種將 Excel 中的特定內容(文本、表格和圖表)復制到使用 VBA 的帶有書簽的 Word 模板的方法。 保存時,我不想要 .docx 格式,而是想將其導出為 .pdf。 我嘗試使用 ExportAsFixedFormat 和 ExportAsFixedFormat2 並且能夠成功導出它。

問題:this.pdf 文件中的內容導出為圖像(我猜)。 我無法突出顯示或復制文件中的文本。 我做錯了什么,我該如何解決? (僅供參考,pdf 上的內容復制設置為“允許”)

我目前正在使用ActiveDocument.ExportAsFixedFormat2 SaveName, wdExportFormatPDF, , wdExportOptimizeForPrint並且也嘗試了其他變量。

任何幫助將不勝感激。

代碼:

Option Explicit

Sub ExportFile()

    Dim wrdApp As Word.Application
    Dim WrdDoc As Word.Document
    Dim WrdRng As Word.Range
    Dim WrdShp As Word.InlineShape
    Dim SaveName As String
    
    Dim ChrObj As ChartObject
    
    Set wrdApp = New Word.Application
    'wrdApp.Visible = True
    'wrdApp.Activate
    
    With wrdApp
        
        .Documents.Add Environ("UserProfile") & "\Desktop\Template.dotx"
        
        
        With .Selection
        Range("XEX771").Copy
            .GoTo What:=-1, Name:="Bookmark1"
            .PasteSpecial xlPasteValues
            .GoTo What:=-1, Name:="Bookmark2"
        Range("AG696", Range("AG696").End(xlDown).End(xlToRight)).Copy
        Application.Wait Now() + #12:00:02 AM#
            .PasteExcelTable True, False, False
            .GoTo What:=-1, Name:="Bookmark3"
        Range("F26", Range("F26").End(xlDown).End(xlToRight)).Copy
        Application.Wait Now() + #12:00:02 AM#
            .PasteExcelTable True, False, False
            .GoTo What:=-1, Name:="Bookmark4"
        Range("XEO5").Copy
            .PasteSpecial xlPasteValues
            .GoTo What:=-1, Name:="Bookmark5"
        Range("K26", Range("K26").End(xlDown).End(xlToRight)).Copy
        Application.Wait Now() + #12:00:02 AM#
            .PasteExcelTable True, False, False
        End With
    
    Set ChrObj = ActiveSheet.ChartObjects(1)
        ChrObj.Chart.ChartArea.Copy
        
        Application.Wait Now() + #12:00:02 AM#
        
    .Selection.GoTo What:=-1, Name:="Bookmark6"
    .Selection.PasteSpecial DataType:=wdPasteMetafilePicture, Placement:=wdInLine
    
    Set ChrObj = ActiveSheet.ChartObjects(2)
        ChrObj.Chart.ChartArea.Copy
        
        Application.Wait Now() + #12:00:02 AM#
        
    .Selection.GoTo What:=-1, Name:="Bookmark7"
    .Selection.PasteSpecial DataType:=wdPasteMetafilePicture, Placement:=wdInLine

    Set ChrObj = ActiveSheet.ChartObjects(3)
        ChrObj.Chart.ChartArea.Copy
        
        Application.Wait Now() + #12:00:02 AM#
        
    .Selection.GoTo What:=-1, Name:="Bookmark8"
    .Selection.PasteSpecial DataType:=wdPasteMetafilePicture, Placement:=wdInLine
   
SaveName = Environ("UserProfile") & "\Desktop\FileName.pdf"

    .ActiveDocument.ExportAsFixedFormat2 SaveName, wdExportFormatPDF, , wdExportOptimizeForPrint

    End With

wrdApp.ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges
wrdApp.Quit

Set wrdApp = Nothing

End Sub

使用 Selection 效率非常低 - 這也可能有助於解釋為什么您在代碼中插入了如此多的延遲。 您還有許多不必要的。轉到和復制/粘貼操作。 嘗試:

Sub ExportFile()
Dim wrdApp As New Word.Application, WrdDoc As Word.Document
Dim WrdRng As Word.Range, WrdShp As Word.InlineShape
Dim xlSheet As Excel.Worksheet: Set xlSheet = ActiveSheet
With wrdApp
  .Visible = False
  Set WrdDoc = .Documents.Add(Environ("UserProfile") & "\Desktop\Template.dotx")
  With WrdDoc
    .Bookmarks("Bookmark1").Range.Text = xlSheet.Range("XEX771").Text
    xlSheet.Range("AG696", Range("AG696").End(xlDown).End(xlToRight)).Copy
    .Bookmarks("Bookmark2").Range.PasteExcelTable True, False, False
    xlSheet.Range("F26", Range("F26").End(xlDown).End(xlToRight)).Copy
    .Bookmarks("Bookmark3").Range.PasteExcelTable True, False, False
    .Bookmarks("Bookmark4").Range.Text = xlSheet.Range("XEO5").Text
    xlSheet.Range("K26", Range("K26").End(xlDown).End(xlToRight)).Copy
    .Bookmarks("Bookmark5").Range.PasteExcelTable True, False, False
    xlSheet.ChartObjects(1).Chart.ChartArea.Copy
    .Bookmarks("Bookmark6").Range.PasteSpecial DataType:=wdPasteMetafilePicture, Placement:=wdInLine
    xlSheet.ChartObjects(2).Chart.ChartArea.Copy
    .Bookmarks("Bookmark7").Range.PasteSpecial DataType:=wdPasteMetafilePicture, Placement:=wdInLine
    xlSheet.ChartObjects(3).Chart.ChartArea.Copy
    .Bookmarks("Bookmark8").Range.PasteSpecial DataType:=wdPasteMetafilePicture, Placement:=wdInLine
    .SaveAs FileName:=Environ("UserProfile") & "\Desktop\FileName.pdf", _
      FileFormat:=wdFormatPDF, AddToRecentFiles:=False
    .Close False
  End With
  .Quit
End With
Set WrdDoc = Nothing: Set wrdApp = Nothing: Set xlSheet = Nothing
End Sub

這是通過 MS Word 保存 PDF 文件時“可能未嵌入 fonts 時的位圖文本”選項的問題。 我參考了這個頁面並添加了 BitmapMissingFonts:=False。 解決了這個問題。

.ActiveDocument.ExportAsFixedFormat2 SaveName, wdExportFormatPDF, BitmapMissingFonts:=False

感謝大家!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM