De vraag.

Al meerdere keren is er in de MicroSoft Excel nieuwsgroep gevraagd naar een mogelijkheid om de waarde van individuele cellen te verbergen bij het afdrukken.

Het probleem.

Excel heeft geen optie "cel niet afdrukken" zoals dat wel voor objecten als figuren, besturingselementen, en zo voorts wél is in te stellen.

De waarde van een cel kan verborgen worden door via celeigenschappen > lettertype > kleur een kleur te kiezen die hetzelfde is als de kleur van de achtergrond onder andere bereikbaar via celeigenschappen > patronen > opvulkleur.
Echter die methode geniet niet de voorkeur omdat bij het selecteren van een gebied waarin de cel is opgenomen toch de waarde zichtbaar wordt en bij het wijzigen van de cel opvulkleur ook de kleur van het lettertype moet worden aangepast.

Daarom is het beter de cel waarde onzichtbaar te maken via celeigenschappen > getal > aangepast > type: ;;; [drie maal puntkomma].
zie de site van Ingrid Baplue waar uitleg en nog veel meer mogelijkheden zijn te vinden voor een celnotatie.
Het voordeel van deze methode is dat de overige instellingen van de celeigenschappen bewaard blijven.

Met één cel om te verbergen kan je dat met de hand doen, als je er elke keer voor het afdrukken er aan denkt tenminste.... 

Een mogelijke oplossing met Vba.

Er zijn drie hoofd macro's om de celwaarde voor het afdrukken te verbergen:

  1. CelNietAfdrukkenUitvoeren, 
    zet voor het afdrukken de celnotatie van de cellen die als niet afdrukken zijn opgeslagen op ;;; en na het afdrukken weer terug op de oorspronkelijke notatie.

  2. CelNietAfdrukkenVastleggen,
    slaat de celadressen van geselecteerde cellen voor niet afdrukken op in een verborgen [nieuw] werkblad. 

  3. CelNietAfdrukkenZien,
    selecteert de cellen die als niet afdrukken zijn vastgelegd.   

De macro's starten met [alt] + [f8] of verbindt ze aan knoppen of voeg ze toe aan een menu. 
Helemaal onderaan deze pagina een code om via de gebeurtenis afdrukken de macro CelNietAfdrukkenUitvoeren te starten. 

Download voorbeeld bestand CelNietAfdrukken.zip.

Zelf aan de slag:

Plaats de onderstaande Vba code regels in een module van de werkmap. 


Option Explicit
'made by Kil & Co versie 20050605
'maximaal aantal aantal cellen voor niet afdrukken = 65535
'maximal aantal bladen = 255
Public Const CelNietAfdrukkenBlad As String = "CelNietAfdrukkenData"

Sub CelNietAfdrukkenUitvoeren()
Dim c As Range
Dim s As String
Dim i As Integer
Dim l As Long
Dim l2 As Long
Dim r As Long
Dim arrCelNietAfdrukken() As String

    i = ActiveSheet.Index
    CelNietAfdrukkenSnelheid True
    If Not CelNietAfdrukkenControle(i, True) Then GoTo Eind

    With Sheets(CelNietAfdrukkenBlad)
        r = .Cells(65536, i).End(xlUp).Row
        l2 = 1
        ReDim arrCelNietAfdrukken(r - 1)
        For l = 1 To r
            s = .Cells(l, i).Value
            If Worksheets(i).Range(s) <> "" Then
                ReDim Preserve arrCelNietAfdrukken(l2 - 1)
                arrCelNietAfdrukken(l2 - 1) = Worksheets(i).Range(s).NumberFormat
                Worksheets(i).Range(s).NumberFormat = ";;;"
                l2 = l2 + 1
            End If
        Next
        Worksheets(i).PrintPreview
        l2 = 1
        For l = 1 To r
            s = .Cells(l, i).Value
            If Worksheets(i).Range(s) <> "" Then
                Worksheets(i).Range(s).NumberFormat = arrCelNietAfdrukken(l2 - 1)
                l2 = l2 + 1
            End If
        Next
    End With
Eind:
    CelNietAfdrukkenSnelheid False
End Sub

Sub CelNietAfdrukkenVastleggen()
Dim i As Integer

    i = ActiveSheet.Index
    If Sheets(i).Type <> xlWorksheet Then
        MsgBox "routine kan alleen met een werkblad worden uitgevoerd"
        Exit Sub
    ElseIf Selection.Count > 65536 Then
        MsgBox "teveel cellen geselecteerd"
        Exit Sub
    ElseIf Not CelNietAfdrukkenBladBestaat Then
        If ActiveWorkbook.Sheets.Count > 255 Then
            MsgBox "er zijn teveel werkbladen"
            Exit Sub
        End If
        CelNietAfdrukkenBladMaken i
    End If
    Sheets(i).Activate
    CelNietAfdrukkenSelectieOpslaan i

End Sub

Sub CelNietAfdrukkenZien()
Dim r As Long
Dim l As Long
Dim s As String
Dim i As Integer

    i = ActiveSheet.Index
    CelNietAfdrukkenSnelheid True
    If Not CelNietAfdrukkenControle(i, True) Then GoTo Eind
    With Sheets(CelNietAfdrukkenBlad)
        r = .Cells(65536, i).End(xlUp).Row
        For l = 1 To r
            If l = r Then
                s = s & .Cells(l, i).Value
            Else
                s = s & .Cells(l, i).Value & ","
            End If
        Next
    End With
    Range(s).Select
Eind:
    CelNietAfdrukkenSnelheid False

End Sub

Private Sub CelNietAfdrukkenSelectieOpslaan(ByVal iSh As Integer)
Dim c As Range
Dim l As Long

    With Worksheets(CelNietAfdrukkenBlad)
        .Columns(iSh).ClearContents
        l = 0
        For Each c In Selection
            l = l + 1
            .Cells(l, iSh) = c.Address
        Next
    End With

End Sub

Private Function CelNietAfdrukkenBladBestaat() As Boolean
Dim Wsh As Worksheet

    For Each Wsh In Worksheets
        If Wsh.Name = CelNietAfdrukkenBlad Then
            CelNietAfdrukkenBladBestaat = True
            Exit Function
        End If
    Next
    CelNietAfdrukkenBladBestaat = False

End Function

Private Function CelNietAfdrukkenInstelling(ByVal iSh As Integer) As Boolean

    With Worksheets(CelNietAfdrukkenBlad)
        If .Cells(1, iSh) = "" Then
            CelNietAfdrukkenInstelling = False
        Else
            CelNietAfdrukkenInstelling = True
        End If
    End With

End Function

Private Sub CelNietAfdrukkenBladMaken(ByVal iSh As Integer)

    With ActiveWorkbook
        .Sheets.Add _
            After:=.Sheets(.Sheets.Count)
        .Sheets(.Sheets.Count).Name = CelNietAfdrukkenBlad
        .Sheets(CelNietAfdrukkenBlad).Visible = xlVeryHidden
    End With

End Sub

Private Function CelNietAfdrukkenControle(ByVal iSh As Integer, _
    ByVal MetMsgb As Boolean) As Boolean

    If Sheets(iSh).Type <> xlWorksheet Then
        If MetMsgb Then _
            MsgBox "routine kan alleen met een werkblad worden uitgevoerd"
        CelNietAfdrukkenControle = False
    ElseIf Not CelNietAfdrukkenBladBestaat Then
        If MetMsgb Then _
            MsgBox "u moet eerst de niet af te drukken cellen definiëren"
        CelNietAfdrukkenControle = False
    ElseIf Not CelNietAfdrukkenInstelling(iSh) Then
        If MetMsgb Then _
            MsgBox "geen instelling voor dit werkblad aangetroffen"
        CelNietAfdrukkenControle = False
    Else
        CelNietAfdrukkenControle = True
    End If

End Function

Private Sub CelNietAfdrukkenSnelheid(ByVal Aan As Boolean)
    With Application
        .EnableEvents = Not Aan
        .ScreenUpdating = Not Aan
    End With

End Sub

De volgende code regels zorgen ervoor dat bij het afdrukken automatisch wordt bepaald of er cellen in het actieve werkblad als niet afdrukken zijn gedefinieerd. Is dat het geval dan kan er een keuze worden gemaakt om wel of niet met de niet afdrukken cellen af te drukken.

Plaats deze regels in ThisWorkbook. 


Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim iSh As Integer
Dim AntWrd As Variant

    iSh = ActiveSheet.Index
    AntWrd = Run("CelNietAfdrukkenControle", iSh, False)
    If AntWrd Then
        AntWrd = MsgBox("Dit Werkblad afdrukken met de instelling voor verborgen cel[len]?", _
            vbYesNo, " afdrukoptie voor " & Sheets(iSh).Name)
        If AntWrd = 6 Then
            Cancel = True
            CelNietAfdrukkenUitvoeren
        End If
    End If

End Sub

Terug naar begin     Terug naar hoofdpagina