打印工作表到PDF
我正在研究一个macros,通过我的工作簿中的所有工作表。
我想完成的是将每个工作表导出为pdf格式,并具有基于特定单元格命名的每个工作表的名称( C8
)。
这是我到目前为止(我还是一个初学者):
Sub print_pdf() Dim wb As String Dim ws As String Dim rng As Range Dim I As Integer 'For Each ws In wb.Worksheets ws = Activeworkbooks.Worksheets.Count For I = 1 To ws Set wb = ActiveWorkbook Set rng = ws.Range("C8") ws.ExportAsFixedFormat Type:=xlTypePDF, Filename:=ws.Range("C8"), Quality:=xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, OpenAfterPublish:=True Next ws End Sub
我可以看到你发布的代码的一些问题。 这应该让你开始,它不包括错误检查(在C8中有一个有效的值,该文件不存在等)
Sub print_pdf() Dim wb As Workbook Dim ws As Worksheet Dim rngFileName As String Dim I As Integer Set wb = ActiveWorkbook For I = 1 To Worksheets.Count wb.Worksheets(I).Activate rngFileName = "C:\Temp\" & Range("C8").Value & ".pdf" ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ rngFileName, Quality:=xlQualityStandard, _ IncludeDocProperties:=False, IgnorePrintAreas:=False, OpenAfterPublish:= _ False Next I End Sub
我testing了Excel 2010上的代码,它工作正常。
像这样的东西,其中包括error handling,以捕获表格名称的任何问题
注意:
-
For each ws
优于循环的纸张数量 - 保存之前不需要激活表单
- 此代码保存到
ActiveWorkbook
相同的path - error handling对无效的文件保存名称很重要
- 如果您在
C8
有重复的值,则较早的值将在导出时被覆盖,代码可以用来testing这个
码
Sub ToPDF() Dim ws As Worksheet Dim strMsg As String If ActiveWorkbook.Path = vbNullString Then Exit Sub For Each ws In ActiveWorkbook.Sheets On Error Resume Next ws.ExportAsFixedFormat xlTypePDF, ActiveWorkbook.Path & "\" & ws.[C8] If Err.Number <> 0 Then strMsg = strMsg & ws.Name & vbNewLine On Error GoTo 0 Next If Len(strMsg) > 0 Then MsgBox strMsg, vbCritical, "errors" End Sub