VBA – 忽略隐藏的工作表 – 将特定的工作表保存为PDF

我正在学习VBA,作为加快我工作stream程的一种手段。 我必须将房间清单发送到excel中生成的PDF格式的属性。 我有以下代码很好,但是当隐藏工作表中的任何一个时,我都会收到错误消息。 我常常要隐藏床单,因为房产从旅途变成旅行。

我想从第四张工作表PDF到工作表“张贴”。 每当我隐藏这些表之间我得到以下错误信息“运行时错误5”:无效的过程调用或参数“

代码如下:

Sub SaveAllPDF() Dim I As Integer Dim Fname As String Dim TabCount As Long TabCount = Sheets("Post").Index ' Begin the loop. For I = 4 To TabCount Sheets(I).Activate With ActiveSheet Fname = .Range("C15") & " " & .Range(" B1") ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:= _ "C:\Users\brandon.ford\Desktop\Operation Automated\" & Fname, Quality:=xlQualityStandard, _ IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False End With Next I End Sub 

任何人有任何想法如何解决这个问题,所以'我= 4到TabCount'忽略任何隐藏的标签? 任何帮助将非常感谢,我一直试图解决这个问题很长一段时间,没有太多的VBA知识。

Sheets.Visible有3个状态: xlSheetVisible, xlSheetHidden, xlSheetVeryHidden

xlSheetVeryHidden是隐藏的工作表,不能从Excel中显示,它甚至不会在您的列表中。

所以,通过testing,你将避免隐藏的床单,它会顺利!

尝试这个 :

 Sub SaveAllPDF() Dim I As Integer Dim Fname As String Dim TabCount As Long TabCount = Sheets("Post").Index ' Begin the loop. For I = 4 To TabCount If Sheets(I).Visible <> xlSheetVisible Then Else With Sheets(I) Fname = .Range("C15") & " " & .Range(" B1") .ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ "C:\Users\brandon.ford\Desktop\Operation Automated\" & Fname, Quality:=xlQualityStandard, _ IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False End With End If Next I End Sub 

使用当前循环,只需在试图导出之前检查WorkSheet是否可见,就可以避免这种情况。 Visible属性包含此信息。 如果表单可见,则该值应为xlSheetVisible。

这是完整的代码与检查:

 Sub SaveAllPDF() Dim I As Integer Dim Fname As String Dim TabCount As Long TabCount = Sheets("Post").Index ' Begin the loop. For I = 4 To TabCount Sheets(I).Activate With ActiveSheet If .Visible = xlSheetVisible Then Fname = .Range("C15") & " " & .Range(" B1") ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:= _ "C:\Users\brandon.ford\Desktop\Operation Automated\" & Fname, Quality:=xlQualityStandard, _ IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False End If End With Next I End Sub