从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
Sheets
和Worksheets
是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