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

variabel afdrukbereik in macro

Status
Niet open voor verdere reacties.

sickofitall

Gebruiker
Lid geworden
29 sep 2008
Berichten
375
Hallo

wat doe ik hier verkeerd?
Ik heb een autofilter en die staat op criteria L
Nu moet mijn afdrukbereik range A1:BE1 tot de rijen waar het gevuld is (beetje moeilijk om uit te leggen maar het komt erop neer dat ik A1:BE1 selecteer en daarna CTRL+pijltje onder doe).

De macro geeft een fout op de volgende regel
afdrukbereik = Range("A1:BE1").End(xlDown).Select

Code:
Sub afdrukbereik()
Dim afdrukbreik As Range

    Selection.AutoFilter Field:=57, Criteria1:="L"
afdrukbereik = Range("A1:BE1").End(xlDown).Select

    ActiveSheet.PageSetup.PrintArea = afdrukbereik
    
    With ActiveSheet.PageSetup
        .PrintTitleRows = "$1:$1"
        .PrintQuality = 600
        .Orientation = xlPortrait
        .PaperSize = xlPaperA4
        .FirstPageNumber = xlAutomatic
        .Order = xlDownThenOver
        .FitToPagesWide = 1
        .FitToPagesTall = 4
        .PrintErrors = xlPrintErrorsDisplayed
    End With
    Range("A1").Select
    Selection.AutoFilter Field:=57

End Sub

Alvast bedankt!
 

Bijlagen

  • afdrukbereik.jpg
    afdrukbereik.jpg
    94 KB · Weergaven: 226
De macro geeft een fout op de volgende regel
afdrukbereik = Range("A1:BE1").End(xlDown).Select

Ik zou het als volgt oplossen:

Dim r As Range 'Het afdrukbereik
Dim Lr As Long 'Laatst rij van het bereik

Lr = Cells(Rows.Count, "A").End(xlUp).Row
Set r = Range("A1:BE" & Lr)

Wat er in jouw code niet goed staat is ".select". Je benoemd het bereik zonder die toevoeging.

Suvcces!

Groet,

Ronald
 
Als ik volgende code invoer
Code:
Lr = Cells(Rows.Count, "A").End(xlUp).Row
Set r = Range("A1:BE" & Lr)
is het de bedoeling dat enkel r wordt afgedrukt
Dit zou ik in de printerinstellingen zetten onder de volgende code
Code:
  ActiveSheet.PageSetup.PrintArea = r

maar hierop geeft hij een foutmelding.
Wat doe ik verkeerd?

mvg
 
Sickofitall,

Dat stukje had ik niet getest en was voor mij ook nieuw. Het moet als volgt:

Code:
ActiveSheet.PageSetup.PrintArea = r.address

Persoonlijk zou ik dit stukje verderop plaatsen en daar ook alleen de afwijkende printinstellingen meegeven. De default instellingen van Excel worden vanzelf over genomen.

Code:
    With ActiveSheet.PageSetup
 [I]       .PrintArea = r.Address[/I]
        .PrintTitleRows = "$1:$1"
        .PrintQuality = 600
        .FitToPagesWide = 1
        .FitToPagesTall = 4
        .PrintErrors = xlPrintErrorsDisplayed
    End With

Groet,

Ronald
 
Geen dank.

Overigens hoef je het printbereik niet specifiek op te geven. Het bereik wordt automatisch aangepast als je filter hebt ingesteld. Dat kan je testen met:

Code:
ActiveWindow.SelectedSheets.PrintPreview

Groet,

Ronald
 
variabel afdrukbereik

Beste mensen,
Ik kom even niet uit (met mijn gering VBA-kennis) met het maken van VBA-regel voor het automatisch afdrukbereik. Ik wil de volgende doen, de afdrukbereik moet aangepast worden tot aan de laatste ingevulde cell in kolommen E t/m J.

Ik heb de volgende code gebruikt:

Dim Lr As Long

Lr = Cells(Rows.Count, "E:J").End(xlUp).Row
Set r = Range("A1:J" & Lr)

ActiveSheet.PageSetup.PrintArea = r.Address

With ActiveSheet.PageSetup
.PrintArea = r.Address
.PrintTitleRows = "$1:$1"
.PrintQuality = 600
.Orientation = xlPortrait
.PaperSize = xlPaperA4
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.FitToPagesWide = 1
.FitToPagesTall = 4
.PrintErrors = xlPrintErrorsDisplayed
End With
Range("A1").Select

End Sub

Wat doe ik verkeerd, ik heb het idee dat hij de"E:J" niet accepteert! Als ik alléén "E" gebruik dan doet ie wel.

Alvast bedankt
 
Ahmed,

Het gedeelte met ..E:J.. werkt inderdaad niet. Ik ga er vanuit dat je de laatste rij van de kolommen E tot en met J zoekt en dat er na kolom J geen gegevens meer staan.

Dan zou je de laatste rij als volgt kunnen opzoeken:
Code:
Sub Macro1()
Dim r As Range
Dim lr As Long
    
    lr = Sheets("Blad1").UsedRange.SpecialCells(xlCellTypeLastCell).Row
    Set r = Range("A1:J" & lr)
End Sub
waarbij je "Blad1" uiteraard dient te vervangen door de naam van het werkelijke tabblad.

Met vriendelijke groet,
Ronald
 
Ronald,

Hij doet nog niet, als ik het opdracht uitvoer dan doet hij oneindig printbereik.

Maar bij mij staan in kolommen A t/m D altijd gegevens, vanaf E t/m J staan daar niet altijd gegevens. De print bereik moet aangepast worden aan de hand van de laatste ingevulde rij in E t/m J.

Wat ik ook nog niet in je formule kan zien het benoemen E t/m J bereik, maar tjah met mijn VBA-kennis beshouw dit als geen opmerking!!

Ahmed,

Het gedeelte met ..E:J.. werkt inderdaad niet. Ik ga er vanuit dat je de laatste rij van de kolommen E tot en met J zoekt en dat er na kolom J geen gegevens meer staan.



Dan zou je de laatste rij als volgt kunnen opzoeken:
Code:
Sub Macro1()
Dim r As Range
Dim lr As Long
    
    lr = Sheets("Blad1").UsedRange.SpecialCells(xlCellTypeLastCell).Row
    Set r = Range("A1:J" & lr)
End Sub
waarbij je "Blad1" uiteraard dient te vervangen door de naam van het werkelijke tabblad.

Met vriendelijke groet,
Ronald
 
Laatst bewerkt:
Ahmed,

Je zou het als volgt kunnen oplossen. Hierbij wordt ik elk van de kolommen gekeken naar de laatste rij en wordt het printbereik hieraan aangepast.
Code:
Dim lr As Integer
Dim r As Range

    lr = WorksheetFunction.Max([e65535].End(xlUp).Row, [f65535].End(xlUp).Row, [g65535].End(xlUp).Row, _
                                [h65535].End(xlUp).Row, [i65535].End(xlUp).Row, [j65535].End(xlUp).Row)
    Set r = Range("A1:J" & lr)
Groet,

Ronald
 
Printbereik

Ronald,
Heel erg bedankt jongen, hij doet 't helemaal. :d

Gr. Ahmed

Ahmed,

Je zou het als volgt kunnen oplossen. Hierbij wordt ik elk van de kolommen gekeken naar de laatste rij en wordt het printbereik hieraan aangepast.
Code:
Dim lr As Integer
Dim r As Range

    lr = WorksheetFunction.Max([e65535].End(xlUp).Row, [f65535].End(xlUp).Row, [g65535].End(xlUp).Row, _
                                [h65535].End(xlUp).Row, [i65535].End(xlUp).Row, [j65535].End(xlUp).Row)
    Set r = Range("A1:J" & lr)
Groet,

Ronald
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan