Excel VBA工作簿打印输出方法

问题描述 投票:0回答:1

我正在编写一个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
excel vba excel-vba
1个回答
0
投票

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

wkb.ExportAsFixedFormat Type:=xlTypePDF, Filename:=outputFileName, Quality:=xlQualityStandard
© www.soinside.com 2019 - 2024. All rights reserved.