打印工作表到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,以捕获表格名称的任何问题

注意:

  1. For each ws优于循环的纸张数量
  2. 保存之前不需要激活表单
  3. 此代码保存到ActiveWorkbook相同的path
  4. error handling对无效的文件保存名称很重要
  5. 如果您在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