背景一:一个Excel格式的预算表下有多个sheet
需求一:将多个sheet导出为一个pdf
解决方案:打开有多个sheet的excel工作表,打开vba编辑器(快捷键为Alt和F11一起摁下),然后粘贴以下代码:
Sub ConvertPDF()
strPath = ThisWorkbook.Path & "\"
For Each s In Sheets
If s.Name <> "w" Then 'w为当前excel表的名称
s.ExportAsFixedFormat Type:=xlTypePDF, Filename:=strPath & s.Name & ".pdf", Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
End If
Next
End Sub
点击运行,运行结果如下:
最后使用Adobe Acrobat DC按顺序合并以上pdf即可。
背景二:一个文件夹下有有多个拥有多个sheet的Excel表格
需求二:将所有Excel中所有sheet导出为一个pdf
解决方案:vba编辑器就不多说了,打开复制以下代码:
Sub ExportToPDF()
Dim Arr, Str1, Str2, Shp, myPath1, myPath2, MyPos, Na, Sh, i1, i2
On Error Resume Next
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Arr = Array(".xls", ".xlsx", ".xlsm")
myPath1 = "D:\qwerdf\" '文件的路径粘贴到这里
myPath2 = myPath1 & "zxcv\" '导出的路径这是好
MkDir myPath2 '新建文一个件夹
Set fs = CreateObject("Scripting.FileSystemObject")
Set fo = fs.GetFolder(myPath1)
For Each fi In fo.Files
i1 = 0
i2 = 0
Na = fi.Name
Do
i1 = MyPos
i2 = i2 + 1
MyPos = InStr(MyPos + 1, Na, ".")
If MyPos = 0 And i2 <> 1 Then
Str1 = Right(Na, Len(Na) - i1 + 1)
Str2 = Left(Na, i1 - 1) & ".pdf"
If UBound(Filter(Arr, Str1)) = 0 Then
Workbooks.Open Filename:=myPath1 & Na
For Each Sh In Workbooks(Na).Sheets
Sh.PageSetup.Zoom = 80
Next
Workbooks(Na).ExportAsFixedFormat Type:=xlTypePDF, Filename:=myPath2 & Str2, Quality:=xlQualityStandard
Workbooks(Na).Close
End If
Exit Do
End If
Loop
Next
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
与方案一相比,方案二的优势在于:方案一仅仅适用于一个excel多个sheet,不适用于多个excel多个sheet;方案二进行了纸张打印面积80%的设置;方案二添加了错误警告和提示。
需要注意的是:无论是方案一还是方案二对excel后缀格式的要求都是小写,一半预算软件导出的excel后缀为大写.XLS,会检测不到,所以在运行之前我们要把后缀改为小写。