1

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

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

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

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

3 ответа3

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

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

0

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

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

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

0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .