我很惊讶你的代码首先运行:)你应该有一个错误 run time error '13', type mismatch
Sheets 和 Worksheets 是Excel中的两个不同的东西
Worksheets 集合是指定或活动工作簿中所有Worksheet对象的集合 . 每个Worksheet对象代表一个工作表 . 而另一方面, Sheets 集合不仅包括工作表集合,还包括其他类型的工作表,包括图表工作表,Excel 4.0宏工作表和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
FOLLOWUP (Based on Comments)
@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