2015-07-09 6 views
1

Я хочу напечатать все листы в рабочей книге, в которой я работаю, за исключением трех конкретных листов под названием «Передняя страница», «Данные» и «Журналы». Я пробовал с «и» - и «или» -созданием и завернутыми круглыми скобками, и ничего не работало.Распечатайте все листы в книге, за исключением 3 конкретных листов

Вот код:

Sub printsheets() 
Dim ws As Worksheet 

    For Each ws In ActiveWorkbook.Worksheets 
     If ws.Name <> "Front Page" And _ 
      ws.Name <> "Data" And _ 
      ws.Name <> "Logs" Then 
      ws.PrintOut 
     End If 
    Next ws 

End Sub 
+0

Это должно сработать. Вы дважды проверяли имена листов? Есть ли пробелы? Попробуйте использовать 'Trim (ws.Name) <> ...'. –

+0

Я не вижу ошибок в коде, он должен работать. – 0m3r

+0

Я забыл упомянуть, что я получил следующее сообщение об ошибке: «Ошибка времени выполнения» 1004 «Метод» PrintOut «og object'_Worksheet» не удалось. @Stribizhev, просто попробовал функцию Trim. Это не работает. Листы, которые были напечатаны, были «Master» и «Logs» - 2 из 3 листов, которые я не хотел печатать. – Saud

ответ

0

Похоже, что у вас есть скрытые листы в книге.

Перед тем, как распечатать их, вам необходимо отобразить их или проверить, скрыт ли рабочий лист. Либо вручную, либо (особенно если листы были скрыты программно с xlSheetVeryHidden):

ws.Visible = xlSheetVisible ' ADD THIS LINE TO UNHIDE A SHEET 
ws.PrintOut 

Или

If ws.Visible = xlSheetVisible Then 
    ws.PrintOut 
End if 

попробовать что-то вроде этого , если вы не хотите, чтобы распечатать скрытые листы:

Sub printsheets() 
Dim ws As Worksheet 
For Each ws In ActiveWorkbook.Worksheets 
    If ws.Visible = True Then 
    If ws.Name <> "Front Page" And _ 
    ws.Name <> "Data" And _ 
    ws.Name <> "Logs" Then 
     With ws.PageSetup 
     .PrintArea = "b2:g26" ' USE YOUR PRINTAREA 
     .Zoom = False 
     .FitToPagesTall = 1 
     .FitToPagesWide = 1 
     End With 
     ws.PrintOut 
    End If 
    End If 
Next ws 
End Sub 
+0

О, не знал, что скрытый лист вызовет проблемы. Я не хочу, чтобы скрытый лист печатался, поэтому я думал о чем-то в соответствии с: Sub printsheets() Dim ws As Worksheet Для каждого ws.Visible в ActiveWorkbook.Worksheets Если ws.Name <> "Главная страница" и _ ws.Name <> "Данные" и _ ws.Name <> "L ogs "Затем ws.PrintOut Конец Если Следующий ws End Sub Но это не работает. – Saud

+0

Пожалуйста, проверьте мой обновленный код. –

+0

Просто добавили еще и заявление (я предполагаю, что ваш код делает то же трюк и выглядит лучше): Sub printsheets() Sub printsheets() Dim WS Как Worksheet For Each WS В ActiveWorkbook.Worksheets Если ws.Name <> "Front Page" И _ ws.Name <> "Данные" И _ ws.Name <> "Журналы" И _ ws.Visible = True Then ws.PrintOut End If Следующая WS End Sub. – Saud

0

Вы также можете использовать один список с листами, которые вы не хотите печатать

Sub printsheets() 
    Dim dontPrint As Object 
    Dim ws As Worksheet 
    Set dontPrint = CreateObject("Scripting.Dictionary") 

    dontPrint.Add "Front Page", 1 
    dontPrint.Add "Data", 2 
    dontPrint.Add "Logs", 3 


    For Each ws In ActiveWorkbook.Worksheets 
    If dontPrint.Exists(ws.Name) Then 
    Else 
     ws.PrintOut 
    End If 
    Next ws 

End Sub 
+0

Fabrizio, я не уверен, что понимаю четвертую строчку. Кстати, я просто попробовал код. такая же ошибка, как и раньше:/ – Saud