- In de meeste voorbeelden van kalenders en planningen in Excel wordt uitbundig gebruik gemaakt van formules om de kenmerken van data (maandnaam, weekdagnaam, weeknummer) weer te geven.
Daardoor bevat zo'n werkblad veel formules die maar eens per week, maand of jaar hun werk hoeven te doen.
Excel heeft de 'prettige' eigenschap om bij iedere wijziging in een werkblad alle formules te herberekenen. Dat lijkt voor die kalendergerelateerde formules aardig overbodig.
Met VBA kun je een kalender/planning-generator maken die pas aktief wordt als er een wijziging van een week, maand of jaar plaatsvindt.
Bovendien heeft VBA meer mogelijkheden om eigenschappen van een datum weer te geven (bijv. het kwartaalnummer, het nummer van een dag in een jaar) dan de standaard-werkbladfunkties in Excel.
De bijlage bevat een 'kalendergenerator' (de macro 'kalender' in de VBA-module van Blad1).
Deze wordt gebruikt voor 5 kalenders (maand, week en jaarkalender) in de bladen 1 t/m 5, met alle mogelijke datumeigenschappen. Van de maand- en de weekkalender worden 2 versies getoond: data vertikaal en data horizontaal.
Met dezelfde generator worden 5 voorbeeldplanningen gemaakt in de bladen 6 t/m 10 met een wisselende selektie van datumeigenschappen. Ook hier 2 versies voor de maand- en de weekplanning.
Voor de jaarkalender en -planning is geen 2e versie gemaakt omdat t/m Excel 2003 een werkblad 256 kolommen heeft, zodat dat wat lastig uitkomt voor 365 dagen.
VBA
- De 'kalendergenerator' is de macro 'kalender' in de VBA-module van Blad1.
De kalendergenerator wordt geaktiveerd door de change-gebeurtenis van de Spinbuttons op Blad1, Blad6, Blad8 en Blad 10.
Aan deze macro worden diverse soorten argumenten (tekst, getal, array) doorgegeven.
De keuze voor de te tonen datumeigenschappen (bijv. weeknr, maand voluit, dagnummer per jaar etc) vindt plaats in de macro in het blad met spinbuttons (Blad1, Blad6, Blad8 en Blad10), die de kalendergenerator aanroept. De tekstreeks, die de basis vormt voor de array st, bevat de specifikaties van de te tonen datumeigenschappen.
Voor de eenvoud wordt alleen gebruik gemaakt van de VBA-methode Format. (De methoden FormatDateTime, MonthName, WeekDayName, Year, Month en Day worden niet gebruikt).
Blad 1
- Maandkalender met alle verschillende datumweergaven van de VBA-methode format in kolom B t/m Q.
Data vertikaal weergegeven.
Spinbutton 'jaar': gekoppeld aan Cel B2
Spinbutton 'maand': gekoppeld aan Cel C2
Spinbutton 'week': gekoppeld aan Cel F2
- Maandkalender met alle verschillende datumweergaven van de VBA-methode format in kolom A.
Data horizontaal weergegeven: kolom B t/m AF
- Weekkalender met alle verschillende datumweergaven van de VBA-methode format in kolom B t/m Q
Data vertikaal weergegeven.
- Weekkalender met alle verschillende datumweergaven van de VBA-methode format kolom A.
Data horizontaal weergegeven: kolom B t/m H
- Jaarkalender met alle verschillende datumweergaven van de VBA-methode format in kolom B t/m Q.
Data vertikaal weergegeven.
- De planningbladen zijn bedoeld als illustratie hoe een maand/week/jaarplanning met VBA kan worden opgezet.
Al deze planningen maken gebruik van de 'kalendergenerator' in Blad1.
Het aantal 'medewerkers' dat in de planningen is opgenomen kan ad libitum worden uitgebreid zonder dat aan de VBA-code iets hoeft te worden gewijzigd.
- Maandplanning met een selektie van datumweergaven van de VBA-methode format in kolom A t/m C
Data vertikaal weergegeven.
Medewerkers in rij 4
De spinbuttons jaar6 en maand6 dienen om jaar en maand in te stellen.
Een wijziging van jaar of maand leidt tot produktie van de planning in Blad6 en Blad7
- Maandplanning met een selektie van datumweergaven van de VBA-methode format in Rij 5 t/m 7.
Data horizontaal in kolom B t/m AF
Medewerkers in kolom A
- Weekplanning met een selektie van datumweergaven van de VBA-methode format in de kolom A t/m D
Data vertikaal weergegeven
Medewerkers in rij 4
De spinbuttons jaar8 en week8 dienen om jaar en week in te stellen.
Een wijziging van jaar of week leidt tot produktie van de planning in Blad8 en Blad9
- Weekplanning met een selektie van datumweergaven van de VBA-methode format in Rij 5 t/m 8.
Data horizontaal in kolom B t/m AF
Medewerkers in kolom A
- Jaarplanning met een selektie van datumweergaven van de VBA-methode format in kolom A t/m D.
Data vertikaal weergegeven
Medewerkers in rij 4
De spinbutton jaar10 dient om het jaar in te stellen.
Een wijziging van jaar leidt tot produktie van de planning in Blad10.
