从Excel工作簿导出一些表格到PDF

我正在编写一个VBA代码,将excel中的某些表单导出到相同的PDF中。 我在我的excel文件中有几张图表,每个图表都以“(name)_Chart”结尾。 我想将所有名字以图表结尾的图表导出到一个PDF文件。 这是我正在写的代码。

Sub FindWS() 'look if it at least contains part of the name Dim s As Worksheet Dim strPath As String strPath = ActiveWorkbook.Path & "\" For Each s In ThisWorkbook.Sheets If InStr(1, s.Name, Chart) Then s.Activate ActiveSheet.ExportAsFixedFormat xlTypePDF, strPath & s.Name & ".pdf" Exit Sub End If Next s End Sub 

这个代码并不限于只输出图表,而是导出整个工作簿。 任何人都可以帮助我figurint什么是缺less我的代码。

谢谢!

修改后的代码:

 Sub FindWS() 'look if it at least contains part of the name Dim s As Worksheet Dim strPath As String strPath = ActiveWorkbook.Path & "\" For Each s In ThisWorkbook.Worksheets If InStr(1, s.Name, "Chart") = 0 Then ' Hide the sheet so it is not exported as PDF s.Visible = False End If Next s With ActiveWorkbook .ExportAsFixedFormat xlTypePDF, strPath & "TEST.pdf" End With 

结束小组

我很惊讶你的代码是在第一个地方运行:)你应该有一个错误的run time error '13', type mismatch

SheetsWorksheets是Excel中的两个不同的东西

Worksheets集合是指定或活动工作簿中所有Worksheet对象的集合。 每个工作表对象表示一个工作表。 另一方面, Sheets集合不仅包含工作表集合,还包含其他types的工作表,包括图表工作表,Excel 4.0macros工作表和Excel 5.0对话工作表。

所以如果你把你的对象声明为Worksheet

 Dim s As Worksheet 

然后确保在循环时循环正确的集合

 For Each s In ThisWorkbook.Worksheets 

并不是

 For Each s In ThisWorkbook.Sheets 

否则你会得到run time error '13', type mismatch

后续(基于评论)

@ Siddharth:1.是的,我想导出以名称“Chart”结尾的图表。 2.我想要在一个PDF中的所有这些图表,PDF的名称应该是“原始”文件名。 (我将不得不将最终的PDF文件保存在不同的位置,这样就不会有文件重叠。) – datacentric

 Option Explicit Sub Sample() Dim ws As Object Dim strPath As String, OriginalName As String, Filename As String On Error GoTo Whoa '~~> Get activeworkbook path strPath = ActiveWorkbook.Path & "\" '~~> Get just the name without extension and path OriginalName = Left(ActiveWorkbook.Name, (InStrRev(ActiveWorkbook.Name, ".", -1, vbTextCompare) - 1)) '~~> PDF File name Filename = strPath & OriginalName & ".pdf" '~~> Loop through Sheets Collesction For Each ws In ActiveWorkbook.Sheets '~~> Check if it is a Chart Sheet and also it ends in "Chart" If ws.Type = 3 And UCase(Right(Trim(ws.Name), 5)) = "CHART" Then ws.Visible = True Else ws.Visible = False End If Next ws '~~> Export to pdf ActiveWorkbook.ExportAsFixedFormat xlTypePDF, Filename LetsContinue: Exit Sub Whoa: MsgBox Err.Description Resume LetsContinue End Sub 

这段代码将查看所有表单。 如果表单名称不匹配,则会隐藏它。 完成后,它将所有可见的纸张导出到一个PDF中。 确保以后不要保存Excel文件,否则表单将保持隐藏状态。

当然,这个代码没有经过testing,所以如果你有问题,请回复(或尝试自己解决,因为你可能会学到一些东西)

 Sub FindWS() 'look if it at least contains part of the name Dim s As Worksheet Dim strPath As String strPath = ActiveWorkbook.Path & "\" For Each s In ThisWorkbook.Sheets If InStr(1, s.Name, "Chart") = 0 Then ' Hide the sheet so it is not exported as PDF s.Visible = False End If Next s ' Export all sheets as PDF ActiveSheet.ExportAsFixedFormat xlTypePDF, strPath & "TEST.pdf" End Sub