Dynamisch afdrukbereik: Alle datums tot en met vandaag.

Status
Niet open voor verdere reacties.

RuudRutten

Gebruiker
Lid geworden
4 apr 2012
Berichten
9
Hallo,

Ik heb een Excel bestand met gegevens in de kolommen A t/m K
In kolom C staan (vanaf rij 5) datums. Het aantal gevulde rijen is dynamisch.
De datums worden gesorteerd van oud naar nieuw.
Ik wil graag m.b.v. VBA een dynamisch afdrukbereik bepalen, hierin moeten voor de kolommen A t/m K de rijen 1 t/m 5 en alle rijen met in kolom c een datum kleiner of gelijk aan vandaag komen.

Kan iemand mij hiermee helpen?

Mvg,
Ruud
 
Jij kan ons al helpen door een voorbeeldbestandje te posten, zodat we iets hebben om mee te werken.
 
Ik heb hier een voorbeeld bestand.
Ik heb het sterk vereenvoudigd en gevuld met fictieve gegevens.

In dit voorbeeld zou het afdrukbereik A1:G17 moeten zijn. Cel C17 is namelijk (in kolom c) de laatste cel met een datum kleiner of gelijk aan vandaag. (24-4-12)
Morgen (25-4-12) zou het afdrukbereik dus A1:G20 moeten zijn.

Mijn doel is dat het afdrukbereik alle werkzaamheden bevat die vandaag of al eerder uitgevoerd diende te worden.

Mvg,
Ruud
Bekijk bijlage Voorbeeld.xlsx
 
Laatst bewerkt:
Hallo Ruud,

Je kunt dit vrij eenvoudig doen door een loop te maken, beginnend vanaf cel C5.
Handig is als je in een cel op je werkblad de functie =VANDAAG() wegschrijft, zodat vrij makkelijk de waarde van 2 cellen met elkaar vergeleken kan worden. In onderstaande staat deze functie in cel H1.

Dus in code:

i = 5

Do

If Range("C" & i) <= Range("H1") Then
i = i + 1
End If

Loop Until Range("C" & i) > Range("H1")
ActiveSheet.PageSetup.PrintArea = "$A$1:$G$" & i - 1
 
Je hoeft daarvoor geen extra cel te gebruiken in je werkblad, gebruik Date in je macro
Code:
Sub tst()
i = 5
Do
    If Range("C" & i) <= Date Then
    i = i + 1
    End If
Loop Until Range("C" & i) > Date
MsgBox i
ActiveSheet.PageSetup.PrintArea = "$A$1:$G$" & i - 1
End Sub

@exopad
Gebruik codetags (selecteer je code en druk op # in de werkbalkjes) als je code post, dit komt de leesbaarheid ten goede ;)
 
Laatst bewerkt:
Alternatief:

Code:
Sub snb()
    With activesheet.Cells(1).CurrentRegion
        .AutoFilter 3, Format(Date + 1, "\<yyyy/mm/dd")
        ActiveSheet.PageSetup.PrintArea = Range(activesheet.Range("A1"), .SpecialCells(12).Areas(.SpecialCells(12).Areas.Count)).Address
        .AutoFilter
    End With
End Sub
 
Je hoeft daarvoor geen extra cel te gebruiken in je werkblad, gebruik Date in je macro
Code:
Sub tst()
i = 5
Do
    If Range("C" & i) <= Date Then
    i = i + 1
    End If
Loop Until Range("C" & i) > Date
MsgBox i
ActiveSheet.PageSetup.PrintArea = "$A$1:$G$" & i - 1
End Sub

@exopad
Gebruik codetags (selecteer je code en druk op # in de werkbalkjes) als je code post, dit komt de leesbaarheid ten goede ;)

Hallo,

Ik gebruik deze code ook, alleen zou ik graag willen dat ik het afdrukbereik voor meerdere tabbladen tegelijk kan instellen (tabbladen heten: 20, 40, 50, 60, 63, 67, 69, 74, 90 & 99) en dat deze bladen ook gelijk automatisch geprint worden.

Hoe zou de code er dan uitzien?

Gr,
Daniel

Ps. zonder msgbox
 
Laatst bewerkt:
Daniël,

Gelieve volgende keer zelf een nieuwe vraag te starten ipv in te breken in iemand anders' vraag.
Code:
Sub tst()
For Each it In Sheets(Array("20", "40", "50", "60", "63", "67", "69", "74", "90", "99"))
i = 5
    Do
        If it.Range("C" & i) <= Date Then
            i = i + 1
        End If
    Loop Until it.Range("C" & i) > Date
    With it
        .PageSetup.PrintArea = "$A$1:$G$" & i - 1
        .PrintOut 'PrintPreview
    End With
Next
End Sub

Of het alternatief
Code:
Sub snb()
For Each it In Sheets(Array("20", "40", "50", "60", "63", "67", "69", "74", "90", "99"))
    With it.Cells(1).CurrentRegion
        .AutoFilter 3, Format(Date + 1, "\<yyyy/mm/dd")
        it.PageSetup.PrintArea = Range(it.Range("A1"), .SpecialCells(12).Areas(.SpecialCells(12).Areas.Count)).Address
        .AutoFilter
    End With
    it.PrintOut
Next
End Sub
 
Laatst bewerkt:
Sorry Warme Bakkertje.. ik dacht dat het zo makkelijker was, volgende keer start ik een eigen vraag..

Maar dankje!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan