• 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.

Automatisch selecteren Portrait/Landscape

Status
Niet open voor verdere reacties.

toffepeer69

Gebruiker
Lid geworden
1 apr 2009
Berichten
25
Ik zoek een manier om van een afdrukbereik te bepalen bij welk verkleiningspercentage het op 1 pagina portrait past en als dit percentage te groot wordt (dit is een voor mij vast ingestelde acceptabele waarde) wordt de pagina landscape geprint.
Nu wordt alles portrait geschaald geprint middels onderstaande code:

Code:
With .PageSetup
                    .PrintArea = Range(Cells(1, 1), Cells(Range("A1").End(xlDown).Row, (Cells.SpecialCells(xlLastCell).Column))).Address
                    .FitToPagesWide = 1                     ' Nodig om het afdrukbereik te schalen naar 1 pagina breed
                    .FitToPagesTall = False
                    .BlackAndWhite = True
                    .BottomMargin = 10
                    .TopMargin = 10
                    .LeftMargin = 10
                    .RightMargin = 10
                    .Orientation = xlPortrait
                    .Zoom = False                           ' Nodig om FitToPagesWide werkelijk te laten werken
                End With
                '.PrintOut Copies:=1, Collate:=True
                .PrintPreview

Dit wil ik dus verder automatiseren.

Wie kan mij verder helpen, al is het maar een idee of zetje in de goede richting.

Toffepeer69
 
Toffepeer,

In jouw code gebruik je voor de printcode de volgende code:

LastColumn = Cells(Cells.SpecialCells(xlLastCell).Column).Column

Hiermee bepaal je zelf tot welk kolom jij het aanvaardbaar vindt om portrait te printen.
Stel breder dan kolom 12 dan wil je overgaan op landscape dan ziet het er zo uit:

If LastColumn >12 Then Stand = "xlLandscape" Else "xlPortrait"

.Orientation = xlPortrait wordt dan omgezet in .Orientation = Stand

Probeer dit eens uit.

Grtz
 
Superzeeuw,

Bedankt voor je reactie, maar dit is volgens mij niet wat ik zoek.

Ik krijg namelijk van diverse mensen bestanden toegestuurd met verschilend in gestelde letterhoogte, kolombreedtes, enz waardoor de ene keer 12 kolommen veel breder kan zijn dan de volgende keer.
Maar ik wil in principe toch alle kolommen naast elkaar printen.

Daarom bepaal ik eerst automatisch het maximale afdrukbereik en wil vervolgens eerst het schalingspercentage op portait weten. Als dit dan bijvoorbeeld <60% is dan bepaal ik het schalingspercentage op landscape. Als dit dan bijvoorbeeld >80% is wordt er automatisch geprint. Is dit ook nog <80% dan krijgt de gebruiker een melding met de keuze wel/niet printen.

Bovenstaande ga ik dus niet oplossen met jouw voorstel.

Ik hoop dat je mijn vraag begrijpt en hier ook een idee voor hebt. Ik neem toch aan dat excel ergens een variabele heeft tijdens het printen waarin het schalingspercentage wordt opgeslagen.

Toffepeer69
 
Code:
ActiveSheet.PageSetup.Zoom = ...

Voor bvb. 60 % geef je 60 in op de puntjes.

De Zoom eigenschap van PageSetup is lezen / schrijven.

Wigi
 
Toffepeer,

Geen enkel probleem dat je mijn idee niet verwerkt..
Soms kan het wel eens gebeuren dat je iets niet goed begrijpt en dan is het altijd fijn als men dat aangeeft.
Ik begrijp nu wel wat je wilt maar ik heb hier nu geen oplossing voor.

Ik blijf zoekende en wie weet.

Wigi, als ik jouw code gebruik om te lezen dan krijg ik als waarde "Onwaar"?

Grtz
 
Wigi, als ik jouw code gebruik om te lezen dan krijg ik als waarde "Onwaar"?

Als ik dat in een leeg bestandje doe, krijg ik 100 (geen zoom in of uit dus).

Code:
Sub f()
    MsgBox ActiveSheet.PageSetup.Zoom
End Sub

Doe eens een bestandje waar je die ONWAAR krijgt.

Wigi
 
ONWAAR kan inderdaad als teruggegeven waarde.

Uit de helpfiles:

If this property is False, the FitToPagesWide and FitToPagesTall properties control how the worksheet is scaled.
 
Wigi,

Ik had de help files er nog niet op nageslagen, maar wanneer je die instelling (1 bij 1 pagina's) gebruikt kun je de zoom factor dus nooit ophalen.

Want dat is denk ik wat toffepeer bedoelt?

Grtz.
 
Wigi en Superzeeuw,

Ik heb jullie ideën ook geprobeerd, maar krijg helaas ook de "False".

Ik hoop echter dat jullie blijven zoeken naar een oplossing voor het probleem.

Daarnaast heb ik nog een andere vraag: ik ben beginnend VBA -hobbyist en zou graag van jullie horen wat goede, maar toch eenvoudig te lezen boeken zijn om VBA onder de knie te krijgen. Daarnaast vraag ik mij ook af of er ergens op internet een compleet overzicht is van alle instellingen die je kunt aanpassen. Hiermee bedoel ik bijvoorbeeld dat er voor ActiveSheet.PageSetup weer diverse instellingen zijn, zoals .PrintArea of .Zoom

Ik hoor het graag.

Toffepeer69
 
Wigi,

Wij zijn beiden niet tevreden met ons antwoord en ik ben verder gaan zoeken.
Volgens mij is onderstaande code, welke ik vond op Ozgrid de oplossing voor het probleem:

Application.ExecuteExcel4Macro "PAGE.SETUP(,,,,,,,,,,,,{#N/A,#N/A})"
MsgBox "Zoom factor is " & ActiveSheet.PageSetup.Zoom
Application.ExecuteExcel4Macro "PAGE.SETUP(,,,,,,,,,,,,{1,#N/A})"

Als de Page.Setup is ingesteld op 1 bij meerdere pagina's dan stelt excel automatisch een zoomfactor in.
Wanneer je nu de instelling zet op "verkleinen/vergroten" dan kun je de zoomfactor wel uitlezen, regel 1 en 2 van de code.
Daarna wordt de instelling weer teruggezet naar "Aanpassen aan:".

Grtz.
 
Superzeeuw,

Ik heb je laatste code uitgeprobeerd en werkend gekregen.

Dus heb ik het geprobeerd op een sheet van een klant die ik regelmatig toegestuurd krijg en nu heb ik het probleem dat mijn stukje VBA wel de laatste kolom weet te bepalen, maar niet de laatste regel, terwijl het met andere sheets wel goed gaat.

De code die ik nu gebruik is alsvolgt:

Code:
With .PageSetup
                     Application.ExecuteExcel4Macro "PAGE.SETUP(,,,,,,,,,,,,{#N/A,#N/A})"
                    Zoomfactor = ActiveSheet.PageSetup.Zoom
                    Application.ExecuteExcel4Macro "PAGE.SETUP(,,,,,,,,,,,,{1,#N/A})"
                    
                    If Zoomfactor <= 80 Then
                        .Orientation = xlLandscape
                        Application.ExecuteExcel4Macro "PAGE.SETUP(,,,,,,,,,,,,{#N/A,#N/A})"
                        Zoomfactor = ActiveSheet.PageSetup.Zoom
                        Application.ExecuteExcel4Macro "PAGE.SETUP(,,,,,,,,,,,,{1,#N/A})"
                    Else
                    End If
                    .PrintArea = Range(Cells(1, 1), Cells(Range("A1").End(xlDown).Row, (Cells.SpecialCells(xlLastCell).Column))).Address
                    .FitToPagesWide = 1
                    .FitToPagesTall = False
                    .Zoom = False
End With

Er gaat iets niet goed met het bepalen van de laatste regel in het bestand, want alleen de eerste 6 regels t/m de A..B..C..enz worden getoond.
Dit wordt gedaan in de regel .PrintArea = .....

Wat zie ik over het hoofd.

Toffepeer69
 

Bijlagen

Laatst bewerkt:
Toffepeer,

Maak er dit eens van:

.PrintArea = Range(Cells(1, 1), Cells(Range("A65535").End(xlUp).Row, (Cells.SpecialCells(xlLastCell).Column))).Address

Wat is het verschil en wat zie je over het hoofd.
In jouw voorbeeld zijn regel 2 t/m 5 leeg.
Wanneer je met range("A1").End(xlDown) gaat zoeken vanaf regel 1 zal hij altijd op zoek gaan, na een leeg gedeelte, naar de eerstvolgende gevulde regel en dat is regel 6
Wanneer je gaat zoeken met Range("A65535").End(xlUp) doet hij hetzelfde en zal vanaf de onderste regel op zoek gaan na de eerst gevulde regel en dan kom je uit op 29.

Dit proces kun je naspelen, selecteer cel A1, en doe dan het volgende:
Druk in CTRL + ArrowDown (pijltjes toets naar beneden) je komt nu op cel A6 terecht
Doe dit nog een keer en je komt op cel A29 terecht
Doe dit nog een keer en je komt op cel A65536 terecht
Doe nu CTRL + ArrowUp en je komt weer op cel A29

Grtz.
 
Laatst bewerkt:
Superzeeuw en Wigi,

Allebei bedankt voor de geboden hulp.

Dankzij de laatste tip werkt mijn macro nu zoals ik hem wilde.

Ik kom tot slot toch nog even terug op een eerdere vraag: ik ben dus op zoek naar goede boeken om VBA onder de knie te krijgen. Heb je nog tips wat betreft boeken?

Daarnaast wil ik ook graag een compleet overzicht is van alle instellingen die je kunt aanpassen. Hiermee bedoel ik bijvoorbeeld dat er voor ActiveSheet.PageSetup weer diverse instellingen zijn, zoals .PrintArea of .Zoom

Ik hoor het graag.

Toffepeer69
 
Ik kom tot slot toch nog even terug op een eerdere vraag: ik ben dus op zoek naar goede boeken om VBA onder de knie te krijgen. Heb je nog tips wat betreft boeken?

Ik hoor het graag.

Toffepeer69

Ik heb me vorige maand deze aangeschaft :
Het cursusboek VBA Programmeren in MS Excel NL ISBN: 9789077838808 is beknopt en overzichtelijk, waardoor het zeer geschikt is voor zelfstudie. Stap voor stap worden de diverse onderwerpen behandeld. Met het cursusboek VBA Programmeren in MS Excel wordt het programmeren in Visual Basis for Excel verder uitgediept. Zo leert u alles over Excel-objecten, werken met ranges, functies en formulieren, inlezen van bestanden en fouten opsporen en voorkomen. Dankzij de vele praktische oefeningen, die gratis en onbeperkt zijn te downloaden via Internet, en de talrijke afbeeldingen kunt u deze vaardigheden op ontspannen wijze eigen maken.
Het MS Excel-pakket kent vele verborgen tips & trucs die een wereld van gemak aan u biedt wanneer u ze heeft geleerd met het cursusboek.
en ook dit : Macro's en VBA in Excel 2007 ISBN: 9789043016216
Gerrit Bruijnes heeft een lange carrière achter zich als docent in de ICT en heeft zich inmiddels toegelegd op het schrijven van computerboeken, waarvan een groot aantal over Excel. Bij Pearson Education verscheen van zijn hand onder andere de bestseller Formules en functies in Excel.
Inhoudsopgave
Inleiding
1. Waarom macro’s?
2. De VBA-omgeving
3. Beveiliging
4. Macro’s samenstellen
5. Leer VBA spreken
6. Macro’s: events en objecten
7. Macro’s en het werkblad
9. Macro’s en databases
10. Macro’s en de buitenwereld
Index

Enkel nu nog de nodige tijd om er in te duiken , tijdens mijn verplichte pauzes als ik daarvoor de tijd krijg .Op het eerste zicht zijn deze althans voor mij begrijpbaar en duidelijk .
 
VBA Developer's Handbook 2nd Edition van Ken Getz
Mastering VBA van Guy Hart-Davis
En de absolute bijbel Excel 2003 Power Programming with VBA van John Walkenbach

Mvg

Rudi
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan