标签:VBA
如果你不想隐藏工作表中的某些单元格,但是又不想将这些单元格打印出来,那么下面的程序可以帮助你实现这一点。这个程序来自于mcgimpsey.com,辑录于此供有兴趣的朋友参考。
在要隐藏打印区域的每个工作表上,选择要隐藏的区域(可以是非连续的),并为其指定一个工作表级名称“NoPrintRange”。
按Alt+F11键,打开VBE,双击ThisWorkbook打开该代码模块,输入下面的代码:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
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) '白色
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
这样,当你打印工作表时,不希望打印的单元格区域看不到内容。