Страницы: 1
RSS
Как сделать условный вывод на печать
 
Есть диапазон содержащий три столбца (Назв. Колич. Цена). Нужно вывести на печать только те строки, в поле "Цена" которых значение не ноль. Как это можно осуществить?  
Заранее благодарю за помощь.
 
Произведите сортировку значений таблицы по столбцу ЦЕНА значений больше 0. И распечатайте. Посмотрите пример.
 
{quote}{login=}{date=27.08.2008 03:08}{thema=Re: Как сделать условный вывод на печать}{post}Произведите сортировку значений таблицы по столбцу ЦЕНА значений больше 0. И распечатайте. Посмотрите пример.{/post}{/quote}  
 
Спасибо за вариант, но засада в том, что поля "Название" имеют в списке логическую свяь, при сортировке она нарушится и список будет трудночитаем. У меня опыта кода под Excel нет, увы, да и VBA не знаю, все как-то С++, но видится такой путь: обрабатываем исходный диапазон в цикле, выбираем нужные строки, формируем все выбранное в новый диапазон, устанавливаем его как область печати. Примерно так. В макросе удалось задать несколько несвязанных диапазонов как область печати - только они печатаются не разных листах, как это обойти? В общем проблема с кодом, поэтому и нужна помощь спецов :)
 
Вот лист о котором речь
 
что-то не прилепилось
 
а, только zipы
 
Всё очень просто. Делается автофильтр. В столбце с ценой выбираете фильтр с условием "больше 0" и печатаете.
 
{quote}{login=Ezoptron}{date=27.08.2008 04:21}{thema=}{post}Всё очень просто. Делается автофильтр. В столбце с ценой выбираете фильтр с условием "больше 0" и печатаете.{/post}{/quote}  
 
Это можно сделать на автомате, например в обработчике OnPrint(), или как это делается в excel? Для пользователя лист заблокирован.
 
Нарисуйте кнопку для печати и запишите макрос макрорекордером, только в начале макроса - снять защиту  
потом скрыть нулевые строки, отправить на печать и снова поставить защиту.  
Строки можно скрыть так...  
Option Explicit  
 
Sub hideNull()  
Dim i As Long  
 
 
i = Cells(Rows.Count, 1).End(xlUp).Row 'последняя строка с данными  
 
   'отобразить все, если есть скрытые строки  
   If Cells.Count <> Cells.SpecialCells(xlCellTypeVisible).Count Then  
      Rows(1 & ":" & i).Hidden = False  
   End If  
 
       'скрыть строки  
       While i > 1  
           
         If Cells(i, 4) = 0 Then Rows(i).Hidden = True  
           i = i - 1  
       Wend  
         
End Sub
 
Вот такой код в итоге получился:  
 
' ActiveSheet.Unprotect  
     
Application.ScreenUpdating = False  ' запрещаем обновление экрана  
 
RowCount = 5 ' с какой строки начинать  
     
   While Not IsEmpty(Cells(RowCount, 2)) ' проверяем каждую строчку пока не встретимся с пустым значением т.е. концом списка  
       If Cells(RowCount, 4).Value = 0 Then   ' проверяем значение в 4-м столбце  
           Rows(RowCount).Hidden = True       ' скрываем строку если в 4-м поле 0  
       End If  
     RowCount = RowCount + 1  
   Wend  
 
Application.ScreenUpdating = True  ' разрешаем обновление экрана  
 
ActiveWindow.SelectedSheets.PrintPreview  
 
Application.ScreenUpdating = False  ' запрещаем обновление экрана  
     
   Cells.Select  
   Selection.EntireRow.Hidden = False  
   Range("A1").Select  
     
Application.ScreenUpdating = True  ' разрешаем обновление экрана  
 
' ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True  
 
 
Повешено на кнопку печать, работает нормально, но проблема осталась с защитой листа. Если лист защищен под пароль, как из кода снять и поставить защиту с паролем?
 
Все нашел, вот окончательный вариант:  
 
 
ActiveSheet.Unprotect "00001111"  ' снять защиту  
     
Application.ScreenUpdating = False  ' запрещаем обновление экрана  
 
ActiveSheet.PageSetup.PrintArea = "$A$5:$E$71" ' установка области печати  
 
RowCount = 5 ' с какой строки начинать  
     
   While Not IsEmpty(Cells(RowCount, 2)) ' проверяем каждую строчку пока не встретимся с пустым значением т.е. концом списка  
       If Cells(RowCount, 4).Value = 0 Then   ' проверяем значение в 4-м столбце  
           Rows(RowCount).Hidden = True       ' скрываем строку если в 4-м поле 0  
       End If  
     RowCount = RowCount + 1  
   Wend  
 
Application.ScreenUpdating = True  ' разрешаем обновление экрана  
 
ActiveWindow.SelectedSheets.PrintPreview  
 
Application.ScreenUpdating = False  ' запрещаем обновление экрана  
     
   Cells.Select  
   Selection.EntireRow.Hidden = False  
   Range("A1").Select  
     
Application.ScreenUpdating = True  ' разрешаем обновление экрана  
 
ActiveSheet.Protect "00001111"  ' поставить защиту  
 
 
Благодарю за помощь всех участников, вроде все работает, есть какие-нибудь замечания?
Страницы: 1
Читают тему
Наверх