Вот удар по коду, который вам требуется. Скрывать и показывать строки легко, если вы знаете, как. Я распечатал лист с включенным макро-рекордером, чтобы вы могли увидеть, как вы можете настроить печать, если хотите. Я бы установил комбинацию клавиш для запуска этого макроса.
Option Explicit
Sub PrintNonBlankColA()
Dim RowCrnt As Integer
Dim RowLast As Integer
' Note: This operates on the active worksheet
Application.ScreenUpdating = False
RowLast = Cells.SpecialCells(xlCellTypeLastCell).Row
' Hide all rows with a used cell and column "A" empty
For RowCrnt = 1 To RowLast
If IsEmpty(Cells(RowCrnt, "A")) Then
Range(RowCrnt & ":" & RowCrnt).EntireRow.Hidden = True
End If
Next
' For the following statements, I switched on the macro recorder,
' printed a sheet with all the headers and footers I wanted,
' switched off the macro recorder and copied the code out of the
' saved macro.
' Consider: .CenterHeader = "Activities for Acme Inc"
' If you name the worksheets for the client, the following would
' give you a heading for the appropriate client:
' .CenterHeader = "Activities for " & ActiveSheet.Name
With ActiveSheet.PageSetup
.PrintTitleRows = ""
.PrintTitleColumns = ""
End With
ActiveSheet.PageSetup.PrintArea = ""
With ActiveSheet.PageSetup
.LeftHeader = ""
.CenterHeader = "Activities for Acme Inc"
.RightHeader = ""
.LeftFooter = "&D"
.CenterFooter = "Page &P of &N"
.RightFooter = "Copyright Nadir Co."
.LeftMargin = Application.InchesToPoints(0.75)
.RightMargin = Application.InchesToPoints(0.75)
.TopMargin = Application.InchesToPoints(1)
.BottomMargin = Application.InchesToPoints(1)
.HeaderMargin = Application.InchesToPoints(0.5)
.FooterMargin = Application.InchesToPoints(0.5)
.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintNoComments
.CenterHorizontally = False
.CenterVertically = False
.Orientation = xlPortrait
.Draft = False
.PaperSize = xlPaperA4
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = False
.Zoom = 100
.PrintErrors = xlPrintErrorsDisplayed
End With
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
' Unhide all rows
Cells.EntireRow.Hidden = False
End Sub
Загрузка вышеуказанного кода в модуль
Из Excel:
- Выберите
Tools
затем, Macro
затем Visual Basic Editor
. Или нажмите Alt+F11
. Вероятно, вы увидите Project Explorer внизу слева, окно Immediate внизу с серым фоном.
- Выберите
Insert
затем Module
. Серая часть станет белой.
- Скопируйте и вставьте мой код в теперь белый раздел. Макрос теперь можно запускать на любом листе.
Использование макроса
- Переключиться в Excel.
- Выберите
Tools
затем, Macro
затем Macros...
. Или нажмите Alt+F8
. Появится небольшое окно макроса. У вас будет только один макрос, поэтому он будет выбран и Run
кнопка будет активна.
Вы можете запустить макрос, нажав Alt+F8
затем, Enter
но вы можете найти следующее более удобным.
- В окне Макрос выберите
Options
. Теперь вы увидите небольшое окно параметров макроса.
- Введите букву (я всегда использую q) в маленькое поле и нажмите
OK
.
- Закройте окно макроса.
Теперь вы можете переключиться на рабочий лист соответствующего клиента и щелкнуть, Ctrl+q
чтобы запустить макрос.
Настройте макрос в соответствии с вашими требованиями
В середине моего кода моя идея о том, как вы могли бы создать отчет с «Активности для Acme Inc» вверху, а дата, номер страницы и авторские права внизу.
Замените этот код следующим образом:
- В Excel выберите
Tools
затем, Macro
затем Record New macro
. Вы видите небольшое окно записи макроса.
- Убедитесь, что в текстовом поле «Хранить макрос в:» написано «Эта книга».
- Нажмите
OK
. Окно исчезает. Вы можете увидеть очень маленькое окно с квадратной кнопкой с надписью Остановить запись. Если это окно видно, на данный момент игнорируйте его.
- Напечатайте отчет клиента с любыми заголовками, колонтитулами, полями и т. Д., Которые вам нужны.
- Если вы видите маленькое окно, щелкните по нему. Если вы не видите его, выберите
Tools
затем, Macro
затем Stop Recording
.
- Переключитесь на редактор Visual Basic. Будет новый модуль. Нажмите на него в окне Project Explorer.
- Вы увидите
Sub Macro1()
все операторы для печати клиентского отчета так, как вам нравится и End Sub
.
- Скопируйте эти операторы (не sub и end sub) и вставьте их поверх эквивалентных операторов в моем макросе.
Если вы не включите ничего вроде имени клиента в верхние и нижние колонтитулы отчета, ваш макрос будет готов к использованию. Я привожу один пример в своем коде, где я использую имя листа в заголовке отчета. Не зная ваших точных требований, я не могу быть более точным, но я надеюсь, что это даст вам старт.
Alt+F8
вы увидите список макросов. Вы видите: Sheet2.PrintNonBlankColA, Sheet4.PrintNonBlankColA, PrintNonBlankColA или что-то подобное. Если это так, Excel не знает, что делать.Application.ScreenUpdating = False
что сейчас добавил в начало макроса, чтобы исправить эту проблему.Так в чем же вопрос? Если указано «Как скрыть ячейки / строки при печати», то ответ заключается в том, чтобы использовать
Workbook_BeforePrint
событие для настройки листа для печати, выполнить печать, а затем восстановить предыдущий вид.источник
Вы можете попробовать выбрать ячейки, которые вы хотите скрыть, перейти к форматированию, затем к защите, а затем к скрытому. Затем выберите вкладку обзора, защитите лист. Оставьте пароль пустым, затем распечатайте.
Когда вы хотите вернуть ячейки, просто нажмите снять защиту листа.
Немного более утомительно, чем делать это с макросом, но в то же время проще.
источник