Tijdelijk verbergen rijen voor afdruk naar pdf

Status
Niet open voor verdere reacties.

Pieterjan9

Nieuwe gebruiker
Lid geworden
2 apr 2020
Berichten
3
Dag allen,

Kan iemand me helpen bij onderstaande situatie.

Ik heb een tabblad met een volledig financieel overzicht.
Dit is onderverdeeld in 4 grote blokken
- Hoofding (rijen 1 tot en met 7)
- 1. Contract (rijen 11 tot en met 30)
- 2. Verrekeningen (rijen 33 tot en met 46)
- 3. Meerwerken (rijen 48 tot en met 65)

Via macro's (dankzij dit forum) heb ik reeds gevonden hoe ik bv. enkel de hoofding + deel 1. Contract kan afdrukken.
Dit heb ik gedaan door tijdelijk de rijen 8 tot en met 13 te verbergen en dan af te drukken. ---> Sub AfdrukBestelling)

Zo lukt dit ook voor "Hoofding+2. Verrekeningen" (Sub AfdrukVerrekening) en "Hoofding+ 3. Meerwerken" (Sub PrintRegiewerken).

Echter, als er een rij wordt ingevoegd, dan klopt mijn verhaaltje niet meer omdat de te verbergen rijen absoluut zijn.
Mijn vraag aan jullie is hoe ik dit dynamisch kan maken via VBA.


bv. zoek in kolom B naar waarde "1. Contract" --> Verberg dan rijen 8 tot en met Rijwaarde cel waarin "1. Contract" staat +2 'De 2 volgende rijen moeten immers ook verborgen worden.
analoog kan ik dan dan voor "2. Verrekeningen" etc doen.

In bijlage kunnen jullie het bestandje terugvinden.

Hartelijk dank.
 

Bijlagen

Zonder een pasklare oplossing; je maakt gebruik van tabellen gebruik deze dan ook om het bereik te bepalen.

Code:
Sub VenA()
For Each it In Sheets("Vorderingoverzicht").ListObjects
  MsgBox it.Name & "  " & it.Range.Address & vbLf & it.HeaderRowRange.Address & vbLf & it.ListRows.Count
Next it
End Sub
 
Eigenlijk kan het met 1 best wel simpele macro als je er wat logica in aanbrengt. Geef de knoppen een logische naam dan ben je met onderstaande volgens mij klaar. (gebruik in voorbeeldbestanden geen .printout maar .printpreview)

Code:
Sub afdrukken()
  Application.ScreenUpdating = False
  With Sheets("Vorderingoverzicht")
    .Range("D:D,G:G,L:Z,AC:AS").Columns.Hidden = True
    x = Val(Split(Application.Caller, "_")(1))
    If x < 4 Then
      .Rows(8).Resize(.UsedRange.Rows.Count + 8).Hidden = True
      .Rows(.ListObjects(x).HeaderRowRange.Row).Resize(.ListObjects(x).ListRows.Count + 1).Hidden = False
     Else
      .Columns("AC:AS").Hidden = False
      .Rows("8:13").Hidden = True
    End If
    .PrintPreview
    .Rows.Hidden = False
    .Range("D:D,G:G,L:Z,AC:AS").Columns.Hidden = False
  End With
End Sub
 

Bijlagen

Dag VenA,

Dank voor het snelle antwoord.

Ik begrijp er niet echt alles van, maar het werkt wel zoals ik in gedachten had. (Ik geef graag toe dat ik niet veel van VBA ken)
Waarvoor al mijn grootste dank.

x = Val(Split(Application.Caller, "_")(1)) --> Dit heeft te maken met de keuze van knop die ik maak vermoed ik?
If x < 4 Then --> Hoe kom je aan "4"?
.Rows(8).Resize(.UsedRange.Rows.Count + 8).Hidden = True --> Hier laat je vanaf rij 8 verbergen tot en met aantal rijen van de tabel. de "+8" is om index +8 te doen door de eerste 8 rijen
.Rows(.ListObjects(x).HeaderRowRange.Row).Resize(.ListObjects(x).ListRows.Count + 2).Hidden = False --> Hier heb ik "+2" van gemaakt, zodat rij met totalen ook nog zichtbaar is.

Hoe krijg ik de rij waarin de Header van elke tabel staat nog verborgen?
Bedoeling is immers dat de hoofding (eerste 7 rijen) bij elke knop wordt gebruikt en geeft Header van tabel alleen maar dubbele informatie.
 
x = Val(Split(Application.Caller, "_")(1)) --> Dit heeft te maken met de keuze van knop die ik maak vermoed ik?
Klopt de knoppen heb ik de naam Knop_x genoemd. (x als getal) Met split kan je zo iets slims doen met het getal.

Je hebt 3 tabellen in het betreffende blad staan dus listobjects(x) waarbij de code identiek is. Bij de 4e optie wil je wat meer laten zien dus vandaar <4 of >3 omdat er iets anders moet gebeuren.

Als je de kopteksten niet wil zien dan wordt het
Code:
.Rows(.ListObjects(x).HeaderRowRange.Row)[COLOR="#FF0000"].offset(1)[/COLOR].Resize(.ListObjects(x).ListRows.Count + 1).Hidden = False
 
Fantastisch, dankjewel.
Tijd om VBA eens wat van dichterbij te bestuderen, lijkt me.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan