【问题标题】:Excel VBA Workbook Printout MethodExcel VBA 工作簿打印方法
【发布时间】:2018-03-06 06:30:12
【问题描述】:

我正在编写一个 VBA 宏来将 Excel 工作簿转换为 PDF。 wkb.PrintOut 方法适用于某些 excel 文件。但对于其他人,它会将第一个工作表打印为我提供的文件名,并提示我输入文件名以保存其余工作表。

为什么 PrintOut 函数会这样?如何让它将整个工作簿打印到我设置的单个文件名中?

Public Sub ConvertToPDF()
Dim ws As Worksheet
Dim inputQueue As Collection
Dim outputQueue As Collection
Dim r As Integer, c As Integer
Dim objFSO As FileSystemObject
Dim objInputFolder As Folder
Dim objOutputFolder As Folder
Dim objInputFile As File
Dim fileExt As String

Set ws = Worksheets("XLPrint")
Set objFSO = New FileSystemObject
Set inputQueue = New Collection
Set outputQueue = New Collection
Application.ActivePrinter = "Microsoft Print to PDF on Ne02:"

Application.DisplayAlerts = False
r = ws.Range("folder_name").Row + 1
c = ws.Range("folder_name").Column

ClearCollection inputQueue
ClearCollection outputQueue

While (ws.Cells(r, c).Value <> "")
    inputQueue.Add objFSO.GetFolder(ws.Cells(r, c).Value)
    outputQueue.Add objFSO.GetFolder(ws.Cells(r, c + 1).Value)
    r = r + 1
Wend

Application.ScreenUpdating = False

Do While inputQueue.Count > 0
    Set objInputFolder = inputQueue(1)
    inputQueue.Remove 1
    Set objOutputFolder = outputQueue(1)
    outputQueue.Remove 1

    For Each objInputFile In objInputFolder.Files
        fileExt = Mid(objInputFile.ShortName, InStr(objInputFile.ShortName, ".") + 1)
        Select Case UCase(fileExt)
            Case "XLSX", "XLSM", "XLS"
                Call PrintXLToPDF(objInputFile, objOutputFolder)
            Case "DOCX", "DOC"
                Call PrintWordToPDF(objInputFile, objOutputFolder)
        End Select
    Next objInputFile
Loop
Application.ScreenUpdating = True

Application.DisplayAlerts = True
Set objFSO = Nothing
Set ws = Nothing
Set inputQueue = Nothing
Set outputQueue = Nothing
MsgBox "Done"

End Sub

Public Sub PrintXLToPDF(ByVal objInputXL As File, ByVal objOutputFolder As Folder)

Dim wkb As Workbook
Dim outputFileName As String

Set wkb = Workbooks.Open(objInputXL.Path)
outputFileName = objOutputFolder.ShortPath & "\" & Mid(objInputXL.Name, 1, InStr(objInputXL.Name, ".") - 1) & ".pdf"
wkb.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False, PrToFileName:=outputFileName, ActivePrinter:="Microsoft Print to PDF on Ne02:"
wkb.Close SaveChanges:=False

Set wkb = Nothing
End Sub

【问题讨论】:

  • 打印前可以保存吗?

标签: vba excel


【解决方案1】:

尝试直接将其保存为 PDF 而不是打印:

wkb.ExportAsFixedFormat Type:=xlTypePDF, Filename:=outputFileName, Quality:=xlQualityStandard

【讨论】:

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