Dynamic Print Area

Status
Niet open voor verdere reacties.

BennyBr

Gebruiker
Lid geworden
14 jan 2021
Berichten
15
Dag iedereen,

Ik ben bezig met een leuke excel slide, waaring 75 Frames staan afgebeeld, met al dan niet wat inhoud.
De frames zijn gewoon telkens een rechthoek van ca 40 rijen en 23 kolommen.
Ze zijn in de sheet in 5 kolommen en 15 rijen ingedeeld, met dus een 75-tal frames.

Mijn macro bepaald of er inhoud is in het frame, en of dit dus al dan niet bij de print area mag worden toegelaten.
En de macro doet het perfect zoals op de afbeelding te zien is, echter wanneer ik de tellers j en i opdrijf naar het gewenste getal lukt het niet meer. :shocked:
j moet tot 4 en i tot 14.
Ik begrijp totaal niet waar de fout zit.



Code:
Sub PrintArea()

'Bepaal de print area
myPA = Range(Cells(10, 3), Cells(41, 21)).Address

For j = 0 To 3
For i = 0 To 3
myPAadd = Range(Cells(10 + 40 * i, 3 + j * 23), Cells(41 + 40 * i, 21 + j * 23)).Address
If WorksheetFunction.CountA(Range(myPAadd)) <> 0 Then
    myPA = myPA & "," & myPAadd
End If
Debug.Print i & " - " & j & " - " & WorksheetFunction.CountA(Range(myPAadd))

Next i
Next j

Debug.Print myPA

Worksheets("VGP").PageSetup.PrintArea = myPA

End Sub

Kan iemand me assisteren?Capture.PNG
 
Gebruik je .FitToPagesWide /Tall?
 
Ik gebruik .FitToPagesWide /Tall? voorlopig nog niet.

Zie bijlage voor het heel algemeen idee.

De tellers i en j gaan tot 3 en werk prima.
Maar ze moeten tot respectievelijk 14 en 4 gaan.

Wanneer ik dus de FOR loop met 1 verhoog (i of j), werkt het niet meer.
Ik zie niet hoe dat komt.
 

Bijlagen

  • VBA_Dynamic_Print_Area.xlsm
    8,1 KB · Weergaven: 24
Uit jouw bijlage krijg ik nog weinig idee ;)
 
Werkt nu de bijlage wel? :)
 

Bijlagen

  • VBA_Dynamic_Print_Area.xlsm
    22,4 KB · Weergaven: 30
Ja bijlage werkt nu wel, je loopt tegen het probleem aan dat jouw afdrukbereik over de 255 karakters heen gaat.
Aangezien jouw "frames" even groot zijn zou ik de oplossing zoeken in 1 groot afdrukbereik waarin de frames die je in het afdrukbereik wilt hebben naast/onder elkaar komen te staan en van daaruit print.
 
De bedoeling van die frames, is dat deze mooi presenteerbaar zijn voor de klant.

Wanneer je de frames manueel selecteert, en dan een printarea toevoegt, lukt dat wel.
Maw het is mogelijk.

De vraag is nu natuurlijk hoe we dat kunnen vertalen in VBA.
 
Ja handmatig kan het wel, toewijzen via VBA loop je tegen het (255) maximum aan.

  1. Zorg ervoor dat je per Range-string niet over de 255 karakters gaat (eventueel opslaan in een array/matrix)
  2. Gebruik Union om deze meerdere Ranges/bereiken te selecteren
  3. Druk of vervolgens zelf op Set Print Area of los deze druk op in code
 
Ik heb nog even zitten spelen met m'n bovenstaande genoemde punten
Punt 1 en 2 nu rekening mee gehouden (past in jouw bestand nog binnen de 14, maar max 255 karakters dien je te ondervangen)
Vervolgens, in plaats van de suggestie uit punt 3, overschrijf je de gereserveerde naam voor het Printbereik en verwijs je deze naar de "Selectie"

Zonder de bereiken te selecteren, zie ik geen mogelijkheid om anders onder de 255 karakter-limiet uit te komen.
Dus toch een keer Select in de code laten staan :cool:

Code:
Sub EvRPrintArea()
Dim arr(4)
'Bepaal de print area

For j = LBound(arr) To UBound(arr)
    mypa = ""
    For i = 0 To 14
        myPaadd = Range(Cells(10 + 40 * i, 3 + j * 23), Cells(41 + 40 * i, 21 + j * 23)).Address
            If mypa = "" Then
                mypa = myPaadd
            Else
                mypa = mypa & "," & myPaadd
            End If
    Next i
arr(j) = mypa
'Debug.Print Len(arr(j)) zorg ervoor dat de lengte onder de 255 blijft, anders krijg je foutmelding op de Range
Next j

Union(Range(arr(0)), Range(arr(1)), Range(arr(2)), Range(arr(3)), Range(arr(4))).Select
'selecteren lukt wel, adres opvragen beperkt tot 255 karakters
    ActiveWorkbook.Names.Add Name:="Print_Area", RefersTo:=Selection
'Bij NL versie "Afdrukbereik" gebruiken oid

End Sub
 
Je kunt ook selectie printen

Selectie printen kan ook - dit zet je in een module - heb ik al gedaan in Dynamic,
Nadeel elk gebied selecteren.

Sub Print_selectie_Dynamic()
Selection.PrintOut Copies:=1, Collate:=True
End Sub

Je selecteert een willekeurig gebied en drukt op de knop - dan print hij vanzelf.
De knop op blad kan je kopiëren naar meerdere plaatsen maar je kan hem ook 1x in het lint plaatsen.
Eventueel marges aanpassen.
Bij tabblad pagina-indeling - rechts onderin op het pijltje drukken kun je het blad instellingen aanpassen en daarna opslaan.
Dan blijft dit staan.
 

Bijlagen

  • VBA_Dynamic_Print_Area.xlsm
    26,8 KB · Weergaven: 16
  • knop op lint.png
    knop op lint.png
    1,7 KB · Weergaven: 29
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan