VBA Excel / Afdrukbereik In de Hoogte Automatisch laten

Status
Niet open voor verdere reacties.

Wocky

Gebruiker
Lid geworden
22 feb 2014
Berichten
192
Beste,

Ik ben een macro'tje aan het opnemen om een afdrukbereik te bepalen in de breedte.
Ik gebruik een Spreadsheet waar het afdrukbereik (bij tabblad "pagina indeling) als volgt is ingesteld:
- Breedte= 1pagina
- Hoogte= automatisch

Het is nu zo dat ik een print wil maken van een gedeelte van deze spreadsheet.
Om telkens het afdrukbereik te moeten aanpassen zou ik het hiervoor graag een macro'tje willen gebruiken.
Dus ik begin een macro op te nemen en krijg volgend resultaat:

ActiveSheet.PageSetup.PrintArea = "$A$1:$R$140"

Nu is het zo dat ik gewoon van kolom A tot R wil selecteren, in de hoogte wil ik er afblijven omdat het aantal rijen voor andere documenten telkens verschilt.
Weet iemand hoe ik dat op een correcte manier doe?

Ik heb hetvolgende als eens geprobeerd:
ActiveSheet.PageSetup.PrintArea = "$A:$R"

En dit werkt op zich wel denk ik, maar ik zie dat Excel hier in een soort loop blijft hangen.
Ik zie dat omdat ik een Macro-button heb staan op de spreadsheet (om nog een andere macro te starten) en deze begint te flikkeren als ik de PrintArea-macro uitvoer.


Kan iemand mij helpen?
Alvast bedankt.
Wocky


Nog een belangrijk detail.
Het zou best zijn dat excel herkend wat de laatst gevulde rij is van alle geselecteerde kolommen.
Het kan voorkomen dat kolom R niet helemaal gevuld is tot de laatste rij, maar bvb kolom C wel (en een andere keer weer kolom D, enz...)
 
Laatst bewerkt:
zoiets?

Code:
ActiveSheet.PageSetup.PrintArea = "$A$1:$R$" & ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row
 
Laatst bewerkt:
Beste,

Voorlopig werkt het wel.
Enkel kijkt hij naar de laatst ingevulde rij van "A".
Ik heb dus hier een "R" ingevuld... met als resultaat dat excel dus enkel kijkt naar R... voorlopig kan ik hier wel mee verder.
Is er iemand die de code weet om te kijken naar alle rijen van A tot R?

ActiveSheet.PageSetup.PrintArea = "$A$1:$R$" & ActiveSheet.Range("R" & Rows.Count).End(xlUp).Row


SjonR,
Kan je eventueel wet toelichting geven bij de code?
Ikzelf ben een VBA groentje, maar ben mezelf aan het bijscholen met een boek "vba for dummies".

Van de code begrijp ik het volgende niet:

Code:
"$A$1:$R$" & ActiveSheet.Range("R" & Rows.Count).End(xlUp).Row



Alvast bedankt.
Wocky
 
ActiveSheet.Range("R" & Rows.Count).End(xlUp).Row geeft een getal, namelijk het rijnummer van de laatst gevulde rij. stel dat dit 34 is, dan is je bereik A1:R34.
 
Code:
 ActiveSheet.PageSetup.PrintArea = "$A$1:$R$" &  ActiveSheet.Columns("A:R").Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row

werkt dit?
 
Laatst bewerkt:
ActiveSheet.Range("R" & Rows.Count).End(xlUp).Row geeft een getal, namelijk het rijnummer van de laatst gevulde rij. stel dat dit 34 is, dan is je bereik A1:R34.

SjonR
Dus..
Code:
Range ("R" & Rows.count)
is de laatste rijnummer?
En wat doet de
Code:
.End(xlUp).Row
? Want die snap ik dan niet.

Of geeft het geheel een nummer?
Code:
ActiveSheet.Range("R" & Rows.Count).End(xlUp).Row
Kan je hiervan eventueel de werking dan uitleggen?
Ik zie.. Range("kolom R" "& is concatenatieteken" "Alle rijen tellen") ".End(xlUp)... terug naar boven gaan?"."Row?"

Alvast bedankt.
Wocky
 
Er zijn veel manieren om te bepalen wat het bereik is. Om het zelf een beetje uit te vogelen kan je deze code eens draaien

Code:
Sub VenA()
  With ActiveSheet
    c00 = "CurrentRegion            : " & .Cells(1).CurrentRegion.Address
    c01 = "Usedrange                : " & .UsedRange.Address
    c02 = "Laatste cel kolom A      : " & .Cells(Rows.Count, 1).End(xlUp).Address
    c03 = "Laatste cel kolom R      : " & .Cells(Rows.Count, 18).End(xlUp).Address
    c04 = "Laatste cel              : " & .Cells.SpecialCells(11).Address
  End With
  MsgBox c00 & vbLf & c01 & vbLf & c02 & vbLf & c03 & vbLf & c04
End Sub
 
Allen,

Super bedankt voor de uitleg!
Simpelste is eigenlijk gewoon "UsedRange" denk ik dan... :p
Hoewel, zal afhankelijk zijn van de toepassing waarschijnlijk.

Wocky
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan