You can hide rows or columns before printing.
If you have a range that doesn't consist of entire rows or columns that you want to avoid printing, here's one way (it works for entire rows and columns, too):
On each worksheet that you want to hide a range, select the range (it can be non-contiguous) and give it a sheet level name of "NoPrintRange" (one way: In the Name box at the left of the formula bar, type the sheet name, then "!NoPrintRange").
Put this in the ThisWorkbook code module: Ctrl-click (Mac) or right-click (Windows, or Macs with 2-button mice) on the workbook title bar, choose , paste the following in the window that opens, then click the XL icon on the toolbar to return to XL:
'*********************************************************
'Purpose: Hide cell values when printing
'Inputs: None: A Sheet-level name of "NoPrintRange" must
be defined for each sheet with a range to be hidden.
'Returns: None: Prints each selected sheet.
'*********************************************************
Private Sub Workbook_BeforePrint(Cancel As Boolean)
'J.E. McGimpsey http://www.mcgimpsey.com/excel/noprintrange.html
Dim vFontArr As Variant
Dim oWkSht As Worksheet
Dim rNoPrintRange As Range
Dim rCell As Range
Dim rArea As Range
Dim i As Long
Dim bOldScreenUpdating As Boolean
Cancel = True
With Application
.EnableEvents = False
bOldScreenUpdating = .ScreenUpdating
.ScreenUpdating = False
End With
For Each oWkSht In ActiveWindow.SelectedSheets
On Error Resume Next
Set rNoPrintRange = oWkSht.Range("NoPrintRange")
On Error GoTo 0
If Not rNoPrintRange Is Nothing Then
With rNoPrintRange
ReDim vFontArr(1 To .Count)
i = 1
For Each rArea In .Areas
For Each rCell In rArea
With rCell
vFontArr(i) = .Font.ColorIndex
If .Interior.ColorIndex = xlColorIndexNone Then
.Font.Color = RGB(255, 255, 255) 'white
Else
.Font.ColorIndex = .Interior.ColorIndex
End If
i = i + 1
End With
Next rCell
Next rArea
oWkSht.PrintOut
i = 1
For Each rArea In .Areas
For Each rCell In rArea
rCell.Font.ColorIndex = vFontArr(i)
i = i + 1
Next rCell
Next rArea
End With
Else
oWkSht.PrintOut
End If
Set rNoPrintRange = Nothing
Next oWkSht
With Application
.ScreenUpdating = bOldScreenUpdating
.EnableEvents = True
End With
End Sub
This page last updated Friday, 17 October 2003
© Copyright 2001 - 2003 McGimpsey and Associates. Except where noted, all code on this site may be distributed under the Gnu GPL. Acknowledgement is appreciated.