在 Excel 中打印时隐藏单元格

在 Excel 中打印时隐藏单元格

我使用的是 Excel 2007。我有一张估算表,我将用它来跟踪客户信息。有些低级信息客户不应该在他们的文档版本上看到。我希望实现以下结果:

打印时只会显示 A 列中第一个单元格“任务编号”中包含数据的行。我认为可行的方法是使用 VBA 脚本在打印时隐藏第一个单元格中没有数据的所有行,然后取消隐藏它们。

链接到 Google Docs 上的文档模板

如果可能的话,中间部分应该是可扩展的,以承担额外的任务等,尽管最简单的方法可能是在中间部分有 100 个遵守隐藏规则的单元格。

答案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。您可能会看到左下方的项目资源管理器,底部的即时窗口,大部分屏幕为灰色。
  • Insert然后选择Module。灰色部分将变为白色。
  • 将我的代码复制并粘贴到现在白色的部分。现在可以针对任何工作表运行该宏。

使用宏

  • 切换到 Excel。
  • 选择Tools然后Macro然后Macros...。或者,单击Alt+F8。将显示一个小的宏窗口。您将只有一个宏,因此它将被选中并且按钮Run将处于活动状态。

Alt+F8您可以通过单击来运行宏Enter,但您可能会发现以下方法更方便。

  • 在宏窗口中选择Options。您将看到一个小的宏选项窗口。
  • 在小框中输入一个字母(我总是使用 q)并单击OK
  • 关闭宏窗口。

您现在可以切换到适当客户的工作表并单击Ctrl+q以运行宏。

根据您的要求调整宏

我的代码中间是我对如何设置一份报告的想法,该报告顶部显示“Acme Inc 的活动”,底部显示日期、页码和版权。

替换此代码如下:

  • 从 Excel 中选择Tools。您MacroRecord New macro看到一个小的“录制宏”窗口。
  • 确保“将宏存储在:”下的文本框显示“此工作簿”。
  • 单击OK。窗口消失。您可能看到一个很小的窗口,上面有一个方形按钮,标有“停止录制”。如果此窗口可见,请暂时忽略它。
  • 打印客户报告并附加您需要的标题、页脚、边距等。
  • 如果可以看到小窗口,请单击它。如果看不到,请选择 ,Tools然后Macro选择Stop Recording
  • 切换到 Visual Basic 编辑器。将会有一个新的模块。在项目资源管理器窗口中单击它。
  • 您将看到Sub Macro1()所有可以按照您喜欢的方式打印客户报告的语句End Sub
  • 复制这些语句(不是 sub 和 end sub)并将它们粘贴到我的宏中等效语句的顶部。

如果您未在报告页眉和页脚中包含任何内容(例如客户名称),则您的宏将可供使用。我在代码中给出了一个示例,其中我使用工作表名称作为报告页眉。由于不知道您的确切要求,我无法更精确地说明,但我希望这能为您提供一个开始。

答案2

那么问题是什么?如果“打印时如何隐藏单元格/行”那么答案是使用事件Workbook_BeforePrint来设置打印工作表,执行打印,然后恢复之前的视图。

答案3

您可以尝试选择要隐藏的单元格,转到格式,然后是保护,然后是隐藏。然后选择审阅选项卡,保护工作表。将密码保留为空白,然后打印。

当您想要恢复单元格时,只需按取消保护表即可。

比使用宏执行操作稍微繁琐一些,但同时也更简单。

相关内容