Meteen naar de cel waarin de datum van vandaag staat
De volgende macro wordt uitgebreid toegelicht in hoofdstuk 8 van Excel VBA voor Professionals Derde editie.
Stel, je hebt een serie datums in kolom A die niet aansluiten, bijvoorbeeld datums van boekingen of weekends.
De volgende macro gaat automatisch naar de cel met de datum van vandaag.
Komt die datum niet voor, dan zoekt de macro maximaal zes dagen vooruit.
Staan ook die zes dagen niet in de lijst, dan wordt de onderste cel van de reeks gevulde cellen geselecteerd.
Sub Datum()
Dim Vandaag As Range
Recent = Date
Nogeens:
Set Vandaag = Range("A1:A1000").Find(What:=Recent, LookAt:=xlWhole)
If Vandaag Is Nothing Then
Recent = Recent + 1
If Recent > Date + 6 Then
Range("A1000").End(xlUp).Select
End
End If
GoTo Nogeens
End If
Vandaag.Select
End Sub
Met Dim Vandaag As Range wordt de variabele Vandaag ingesteld als een object, namelijk een cel, omdat Set daarnaar gaat zoeken. De datum van vandaag komt in een variabele die Recent heet.
We zoeken met Find niet meteen naar de datum van vandaag, maar zetten vandaag in de variabele Recent, waar we enkele malen 1 (is één dag) bij optellen.
De code zoekt in de cellen A1 tot en met A1000 naar de cel waarin de datum van vandaag staat, met de opdracht
Set Vandaag = Range("A1:A1000").Find(What:=Recent)
Staat de datum van vandaag niet in de lijst, dan is de variabele Vandaag leeg. Dan moet de macro naar de volgende dag zoeken. Dat doen de regels:
If Vandaag Is Nothing Then
Recent = Recent + 1
GoTo Nogeens
End If
Bij de datum van vandaag wordt één dag opgeteld door
Recent = Recent + 1
De inhoud van de variabele Recent is nu de dag na vandaag.
De procedure gaat terug naar het label Nogeens: aan het begin, en zoekt nu naar de datum van morgen. Komt die datum ook niet in de lijst voor, dan wordt daarbij weer 1 opgeteld, zodat de inhoud van Recent de datum van overmorgen is. De procedure gaat terug naar Nogeens: en zoekt naar de datum van overmorgen enzovoort.
Om nu te voorkomen dat deze procedure in een eindeloze lus terechtkomt, staat er binnen het eerste If…Then-blok nog een If…Then-blok:
If Recent > Date + 6 Then
Range("A1000").End(xlUp).Select
End
End If
Als de variabele Recent, door er steeds één dag bij op te tellen, groter is dan vandaag plus 6, wordt de onderste gevulde cel van A1 tot en met A1000 geselecteerd. De procedure springt daarna naar het eind van de code.
Met andere woorden: de macro markeert de cel met de datum van vandaag en zoekt maximaal zes dagen vooruit; staan die zes dagen niet in de lijst, dan wordt de onderste cel van de reeks gevulde cellen geselecteerd.
Stel, je hebt een serie datums in kolom A die niet aansluiten, bijvoorbeeld datums van boekingen of weekends.
De volgende macro gaat automatisch naar de cel met de datum van vandaag.
Komt die datum niet voor, dan zoekt de macro maximaal zes dagen vooruit.
Staan ook die zes dagen niet in de lijst, dan wordt de onderste cel van de reeks gevulde cellen geselecteerd.
Sub Datum()
Dim Vandaag As Range
Recent = Date
Nogeens:
Set Vandaag = Range("A1:A1000").Find(What:=Recent, LookAt:=xlWhole)
If Vandaag Is Nothing Then
Recent = Recent + 1
If Recent > Date + 6 Then
Range("A1000").End(xlUp).Select
End
End If
GoTo Nogeens
End If
Vandaag.Select
End Sub
Met Dim Vandaag As Range wordt de variabele Vandaag ingesteld als een object, namelijk een cel, omdat Set daarnaar gaat zoeken. De datum van vandaag komt in een variabele die Recent heet.
We zoeken met Find niet meteen naar de datum van vandaag, maar zetten vandaag in de variabele Recent, waar we enkele malen 1 (is één dag) bij optellen.
De code zoekt in de cellen A1 tot en met A1000 naar de cel waarin de datum van vandaag staat, met de opdracht
Set Vandaag = Range("A1:A1000").Find(What:=Recent)
Staat de datum van vandaag niet in de lijst, dan is de variabele Vandaag leeg. Dan moet de macro naar de volgende dag zoeken. Dat doen de regels:
If Vandaag Is Nothing Then
Recent = Recent + 1
GoTo Nogeens
End If
Bij de datum van vandaag wordt één dag opgeteld door
Recent = Recent + 1
De inhoud van de variabele Recent is nu de dag na vandaag.
De procedure gaat terug naar het label Nogeens: aan het begin, en zoekt nu naar de datum van morgen. Komt die datum ook niet in de lijst voor, dan wordt daarbij weer 1 opgeteld, zodat de inhoud van Recent de datum van overmorgen is. De procedure gaat terug naar Nogeens: en zoekt naar de datum van overmorgen enzovoort.
Om nu te voorkomen dat deze procedure in een eindeloze lus terechtkomt, staat er binnen het eerste If…Then-blok nog een If…Then-blok:
If Recent > Date + 6 Then
Range("A1000").End(xlUp).Select
End
End If
Als de variabele Recent, door er steeds één dag bij op te tellen, groter is dan vandaag plus 6, wordt de onderste gevulde cel van A1 tot en met A1000 geselecteerd. De procedure springt daarna naar het eind van de code.
Met andere woorden: de macro markeert de cel met de datum van vandaag en zoekt maximaal zes dagen vooruit; staan die zes dagen niet in de lijst, dan wordt de onderste cel van de reeks gevulde cellen geselecteerd.