Скрыть ячейки при печати в Excel

1

Я использую Excel 2007. У меня есть оценочный лист, который я буду использовать для отслеживания клиентской информации. Существует некоторая информация низкого уровня, которую клиент не должен видеть в своей версии документа. Я стремлюсь достичь следующих результатов:

При печати будут отображаться только строки с данными в первой ячейке «Номер задачи» в столбце А. Я полагаю, что это выполнимо - это сценарий VBA для скрытия всех строк без данных в первой ячейке при печати и их последующего отображения.

Ссылка на шаблон документа в Документах Google

Если возможно, средняя часть должна быть расширяемой, чтобы выполнять дополнительные задачи и тому подобное, хотя, вероятно, проще всего иметь 100 ячеек в средней части, которые подчиняются правилам сокрытия.

Gerard
источник

Ответы:

1

Вот удар по коду, который вам требуется. Скрывать и показывать строки легко, если вы знаете, как. Я распечатал лист с включенным макро-рекордером, чтобы вы могли увидеть, как вы можете настроить печать, если хотите. Я бы установил комбинацию клавиш для запуска этого макроса.

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) и вставьте их поверх эквивалентных операторов в моем макросе.

Если вы не включите ничего вроде имени клиента в верхние и нижние колонтитулы отчета, ваш макрос будет готов к использованию. Я привожу один пример в своем коде, где я использую имя листа в заголовке отчета. Не зная ваших точных требований, я не могу быть более точным, но я надеюсь, что это даст вам старт.

Тони Даллимор
источник
Привет, извините, я не так уж и хорош с Excel, я щелкнул правой кнопкой мыши код представления вкладки и ввел его полностью в рабочий лист для тестирования, похоже, он делает то, что мне нужно, однако я понятия не имею, что такое макро-проводник и как я его настрою.
Джерард
Находясь на вашем активном листе, нажмите ALT + F8, чтобы открыть окно макроса. Выберите PrintNonBlankColA и затем нажмите кнопку RUN .
CharlieRB
1
Вы удалили копию макроса, который вы записали на листе? Если вы сохранили эту копию, а затем скопировали этот лист, вы получите две копии макроса. Если вы установили Ctrl + q для запуска первой копии, теперь у вас будет два макроса для запуска с Ctrl + q, и он также не будет запускаться. Если вы нажмете, Alt+F8вы увидите список макросов. Вы видите: Sheet2.PrintNonBlankColA, Sheet4.PrintNonBlankColA, PrintNonBlankColA или что-то подобное. Если это так, Excel не знает, что делать.
Тони Даллимор
1
Если вы внесли изменения, вам нужно решить, какая версия является основной версией. Откройте пустой документ NotePad и скопируйте в него основную версию. Удалить все макросы из всех листов и всех модулей. Скопируйте основную версию из Блокнота в Модуль 1. Переопределите клавишу «Печать». Я надеюсь, что это решит проблему.
Тони Даллимор
1
Когда я писал макрос, я проверял его в редакторе. Когда я попытался дублировать макрос, я запустил его из Excel, где заметил, что он мигает во время печати. Я пропустил то, Application.ScreenUpdating = Falseчто сейчас добавил в начало макроса, чтобы исправить эту проблему.
Тони Даллимор
0

Так в чем же вопрос? Если указано «Как скрыть ячейки / строки при печати», то ответ заключается в том, чтобы использовать Workbook_BeforePrintсобытие для настройки листа для печати, выполнить печать, а затем восстановить предыдущий вид.

Крис Нейлсен
источник
Какой сценарий формулы / VBA будет проверять, есть ли у задачи номер, если его нет, то эта строка скрывается, когда я автоматически печатаю документ?
Джерард
0

Вы можете попробовать выбрать ячейки, которые вы хотите скрыть, перейти к форматированию, затем к защите, а затем к скрытому. Затем выберите вкладку обзора, защитите лист. Оставьте пароль пустым, затем распечатайте.

Когда вы хотите вернуть ячейки, просто нажмите снять защиту листа.

Немного более утомительно, чем делать это с макросом, но в то же время проще.

Biosci3c
источник