• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Rijen als 1 blok beschouwen

Status
Niet open voor verdere reacties.

RoyPijnenburg

Nieuwe gebruiker
Lid geworden
31 mei 2016
Berichten
3
Goedemorgen,

Voor het maken van uniforme offertes heb ik een excel bestand gemaakt.
Als het bestand ingevuld is kan men een PDF afdrukken om een nette offerte te krijgen.

Omdat er met formules gewerkt wordt heb ik een 10-tal artikelvakken (= drie rijen dik) al ingesteld. Hiermee hoeft de gebruiker alleen de artikelnaam in typen en wordt de prijs/omschrijving etc automatisch ingevuld. Wanneer niet alle artikelvakken gebruikt worden kan men deze 'verbergen'. Zodoende is er geen overbodige informatie te zien. Als het bestand geopend word bevat het 2 pagina's.

Ik loop echter tegen het volgende probleem:

Onder de artikelen staan een aantal voorwaarden, een lijstje van 6 rijen lang, die ook enkele lijst functies bevatten, om bijvoorbeeld de levertijd uit een lijstje te selecteren. Deze staan bovenaan pagina 2

Wanneer men een aantal artikelen verbergt (= een aantal rijen verbergen), schuiven de onderstaande rijen (= de voorwaarden lijst) automatisch naar boven.
Het kan zo zijn dat de voorwaarden dan gedeeld worden over twee pagina's.
Dat zou ik graag willen voorkomen.

Mijn vraag: is er een manier om een aantal rijen als 'één' te laten gedragen? m.a.w: de rijen mogen alleen naar boven schuiven wanneer er genoeg ruimte is voor alle bij elkaar horende rijen.

In de bijlage een simpel voorbeeld. Wanneer de gele rijen verborgen worden, splitsen de voorwaarden zich over 2 pagina's.

Ik wil het bestand graag beveiligen tegen bewerkingen behalve de benodigde velden. Ook rijen toevoegen wil ik blokkeren om de uniformiteit te bewaken. Om het bestand goed bruikbaar te houden voor iedereen zijn zo min mogelijk bewerkingen wenselijk, vandaar dat ik het netjes wil afwerken.

Alvast bedankt!

Met vriendelijke groet,

Roy
 

Bijlagen

Dit kan toch gewoon door het invoegen van een "page break"?

In de Engelse versie (2013) via PAGE LAYOUT > Breaks > Insert Page Break.
 
Dit kan toch gewoon door het invoegen van een "page break"?

In de Engelse versie (2013) via PAGE LAYOUT > Breaks > Insert Page Break.

Bedankt voor je reactie!
Dat klopt inderdaad. Het komt echter vaak voor dat er maar zo weinig artikelen nodig zijn dat de gehele offerte op 1 pagina past, inclusief de lijst en afsluiting.
Door het toepassen van een page break blijft alles altijd op pagina 2 staan. Het zou daar alleen moeten staan wanneer het niet in zijn geheel op de eerste pagina past.
 
Met "pagina eindevoorbeeld" kun je de pagina grenzen precies zo installen als je zelf wil.
 
Met "pagina eindevoorbeeld" kun je de pagina grenzen precies zo installen als je zelf wil.

Wat ik ook eerder aangaf aan Peter B: het pagina einde is inderdaad in te stellen, waardoor ik bij het verbergen van rijen op pagina 1 geen informatie van pagina 2 op de eerste pagina zie.

Ik wil juist dat er geen harde break in zit. Het moet afhankelijk van de beschikbare ruimte op pagina 1 de informatie van pagina 2 laten opschuiven indien er genoeg ruimte is om alles weer te geven.

Misschien begrijp ik jullie verkeerd, maar zover ik kan zien werkt een page break daar niet voor.
 
Ik begrijp heel goed wat je bedoelt. Maar als er geen harde breaks in het document zitten bepaalt Excel zelf waar de pagina einden komen bij het verbergen van rijen. Met pagina eindevoorbeeld kun je zien waar Excel deze einden neerzet. Om aan weduwen en wezen bescherming te doen moet je eventueel zelf nog wat corrigeren door de stippellijn die zachte pagina einde weergeeft te verslepen naar de plaats die je zelf zou willen.

Om een bepaald gebied als één te beschouwen zal je er een plaatje of iets dergelijks van moeten maken in die in het document opnemen.
 
Dan kun je gebruik maken van events. Zie bijgevoegde code. Het is logisch deze code te hangen BeforePrint-event. Voor het testje heb ik hem gehangen aan het BfeoreSave-event.

Je zult het workbook als .xlsm op moeten slaan
De code moet worden geplaatst in "Thisworkbook"

Code:
'Private Sub Workbook_BeforePrint(Cancel As Boolean)

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Dim ws, wsOrig As Worksheet
Dim rowPage2Start As Long
Dim origView

Application.ScreenUpdating = False

Set wsOrig = ActiveWorkbook.ActiveSheet

For Each ws In Worksheets

    If ws.Name = "Blad1" Then

        ws.Activate
        origView = ActiveWindow.View
        ActiveWindow.View = xlPageBreakPreview

        ws.ResetAllPageBreaks
        Range("B1").Select
    
        rowPage2Start = ws.Cells.Find(What:="Voorwaarden", After:=ActiveCell, _
            LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, _
            SearchDirection:=xlNext, MatchCase:=True, SearchFormat:=False).Row - 1
    
        If ws.HPageBreaks.Count > 0 Then
            ws.HPageBreaks.Add before:=Cells(rowPage2Start, "A")
        End If
    
        ActiveWindow.View = origView
    End If

Next ws
wsOrig.Activate

Application.ScreenUpdating = True

End Sub

Succes!
 
Overigens zou er dan natuurlijk iets bijgebouwd moeten worden om te controleren op het totaal aantal regels. Dit heb ik nog niet gedaan. Daar heb ik nu ook (even?) geen tijd voor.
 
Dan nu de complete code inclusief het evt. verwijderen van de pagebreak bij 16 of meer verborgen rijen (aanname is dat je alleen artikelrijen verbergt ...

Code:
'Private Sub Workbook_BeforePrint(Cancel As Boolean)

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Dim ws, wsOrig As Worksheet
Dim rowPage2Start, numHiddenRows, origView As Long

Application.ScreenUpdating = False

Set wsOrig = ActiveWorkbook.ActiveSheet

For Each ws In Worksheets

    If ws.Name = "Blad1" Then

        ws.Activate
        origView = ActiveWindow.View
        ActiveWindow.View = xlPageBreakPreview

        ws.ResetAllPageBreaks
        Range("B1").Select
    
        rowPage2Start = ws.Cells.Find(What:="Voorwaarden", After:=ActiveCell, _
            LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, _
            SearchDirection:=xlNext, MatchCase:=True, SearchFormat:=False).Row - 1
    
        numHiddenRows = ws.Rows.Count - ws.Columns(1).SpecialCells(xlCellTypeVisible).Count
    
        If ws.HPageBreaks.Count > 0 And numHiddenRows < 16 Then
            ws.HPageBreaks.Add before:=Cells(rowPage2Start, "A")
        End If

        ActiveWindow.View = origView
    End If

Next ws
wsOrig.Activate

Application.ScreenUpdating = True

End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan