2015-04-02 8 views
1

Я изучаю VBA как средство ускорения некоторых процессов на моей работе. Мне нужно отправить списки комнат в свойствах в формате PDF, сгенерированном в форме excel. У меня есть следующий код, который отлично работает, но я получаю сообщение об ошибке, когда один из листов скрыт. Мне приходится часто скрывать листы, поскольку свойства меняются от поездки до поездки.VBA - Игнорирование скрытых рабочих листов - Сохранение конкретных рабочих листов в формате PDF

Я хочу, чтобы PDF Рабочие листы с 4-го листа на лист «Почта». Всякий раз, когда я скрыть лист между ними я получаю следующее сообщение об ошибке «Ошибка выполнения„5“: Invalid вызова процедуры или аргумент»

Вот код:

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 

Кто-нибудь есть какие-либо идеи, как устраните эту проблему, так что «For I = 4 to 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

+0

Плохо, я забыл Лист в переменной, потому что я не использовал их в течение длительного времени! Исправлено! ;) – R3uK

+1

Упрощенный как в отличие от исходного кода и принятого ответа, он не активирует каждый лист – brettdj

3

С текущего цикла, это лучше всего избежать, просто проверяя, что 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 
+0

Отлично, это сработало отлично! Большое вам спасибо, я чувствую, что так долго танцую вокруг этого исправления и не могу понять все правильно. – arbitel

Смежные вопросы