2015-04-02 109 views
1

我正在学习VBA作为加快工作中某些过程的手段。我必须将房间清单发送到excel格式的PDF格式的属性。我有下面的代码很好用,但是每当其中一个工作表被隐藏时,我会收到一条错误消息。由于房产从旅途变为旅行,我必须经常隐藏床单。VBA - 忽略隐藏的工作表 - 将具体工作表保存为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知识。

回答

2

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

xlSheetVeryHidden是不能可见从Excel隐藏的工作表,它甚至不会在你的列表中。

因此,通过测试,您将避免隐藏床单并顺利进行!

试试这个:

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 
+0

感谢您的答复!出于某种原因,当我运行这个宏时,没有任何反应。没有错误,它似乎没有开始,因为没有加载 – arbitel 2015-04-02 15:15:30

+0

我的不好,我忘了工作表变量,因为我很久没有使用它们了!更正了! ;) – R3uK 2015-04-02 15:20:28

+1

Upvoted与原始代码和接受的答案不同,它不会激活每个工作表 – brettdj 2015-04-03 08:45:24

3

以您目前的循环,这是最简单地检查工作表是试图出口前可见避免。 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 
+0

完美,这很好!非常感谢你,我觉得我一直在这个问题上跳舞很长时间,而且不太对劲。 – arbitel 2015-04-02 15:13:36