Страницы: 1
RSS
Печать скрытых листов при условие заполненой ячейки
 
Всем доброго вечера!
Есть два макроса(нашёл на форуме):
-первый печатает только те листы книги в которых ячейка А1 не пуста или не равна нулю, но если листы скрыть то макрос выдаёт ошибку и ничего не печатает.
-второй код печатает листы если их скрыть, но в нём нужно перечислять название листов.
Моя задача-записать код который будет печатать листы в которых ячейка  A1 не пуста и будет их печатать даже если эти листы скрыты.
Сижу верчу, кручу эти два кода но ничего так и не вышло.
Буду несказанно благодарен за любую помощь.
Ниже два моих макроса(без Sub и End Sub)


Dim sh As Worksheet
For Each sh In ThisWorkbook.Worksheets
If Not sh.[A1].Value = 0 Then sh.PrintOut Copies:=1
Next sh



Application.ScreenUpdating = False
For Each ws In Sheets(Array("Лист1", "Лист2", "Лист3"))
   With ws
       .Visible = -1
       .PrintOut
       .Visible = 0
   End With
Next
 
Попробуйте так:
Код
Sub Test()
  Dim sh As Worksheet, i As Long
  Application.ScreenUpdating = False
  For Each sh In ThisWorkbook.Worksheets
    If Not sh.[A1].Value = 0 Then
      i = sh.Visible
      If i <> xlSheetVisible Then sh.Visible = xlSheetVisible
      sh.PrintOut Copies:=1
      If i <> xlSheetVisible Then sh.Visible = i
    End If
  Next
  Application.ScreenUpdating = True
End Sub
Изменено: ZVI - 13.05.2013 20:18:25
 
Ничего себе....Cам вряд ли смог бы написать из двух ЭТОТ код...
Огромное спасибо, всё идеально работает, как и хотелось)
 
ZVI не подскажите куда в это код вставить, диалоговое окошко подтверждения перед печатью?

lReply = MsgBox("Уверены? "), vbYesNo + vbQuestion)
If lReply = vbYes Then
 
Хотя, наверное это уже наглость...
Буду искать сам.
Спасибо.
 
Перед For Each
Код
lReply = MsgBox("Уверены? "), vbYesNo + vbQuestion)
If lReply = vbNo Then Exit Sub'ничего не печатаем

или запрос перед каждым листом:
Код
Sub Test()
  Dim sh As Worksheet, i As Long
  Application.ScreenUpdating = False
  For Each sh In ThisWorkbook.Worksheets
    If Not sh.[A1].Value = 0 Then
      i = sh.Visible
      lReply = MsgBox("Уверены? "), vbYesNo + vbQuestion)
      If lReply = vbYes Then
          If i <> xlSheetVisible Then sh.Visible = xlSheetVisible
          sh.PrintOut Copies:=1
          If i <> xlSheetVisible Then sh.Visible = i
      End If
    End If
  Next
  Application.ScreenUpdating = True
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
спасибо, уже нашёл и записал так:, после Application.ScreenUpdating = False

If MsgBox("уверены?", vbExclamation + vbYesNo) <> vbYes Then Exit Sub
 
Цитата
oOps: после Application.ScreenUpdating = False
Лучше перед Application.ScreenUpdating = False, т.к. не во всех версиях Excel автоматически восстанавливается обновление экрана
Страницы: 1
Наверх