RSS

Klasser og class collections i Excel VBA

Alt det med klasser og class modules lyder frygtelig langhåret, men er faktisk ikke så svært. Når man har forstået, hvordan det hænger sammen, kan man slet ikke lade være at lave sine egne klasser, fordi det gør det langt nemmere at programmere struktureret.

Hvad er en klasse eller et class module?

Man indsætter et klassemodul (Class Module) på samme måde, som man indsætter et standardmodul, men med en klasse kan man definere sine egne properties (egenskaber) og methods (metoder).

Lad os f.eks. sige, at en klasse repræsenterer en lagervare i et supermarked. Et supermarked vil nok ikke styre sin lagerbeholdning med Excel, men det kunne de sagtens, og det er jo også bare et eksempel! Klassen kan så have en stribe properties såsom: leverandør, indkøbspris, salgspris, antal leverede, antal solgte, restbeholdning, varegruppe, fareklasse osv.

Klassen kan også have nogle methods og events. For eksempel kan restbeholdningen automatisk beregnes, når der kommer en ny leverance, eller der sælges en flaske, og hvis restbeholdningen kommer ned på et bestemt antal, kan det automatisk udløse en ordre.

Kun fantasien sætter grænser.

Class collections - klassesamlinger

Det smukke er så, at denne lagervareklasse fungerer for alle lagervarer - den er en slags "småkageform". Man skal kun skrive koden én gang, og for hver lagervare opretter man et nyt eksemplar (kopi) af klassen, som "opbevares" i en class collection - en samling af lagervareklasserne. Hvis en vare udgår, fjernes dens klasse selvfølgelig fra samlingen.

Alle oplysninger om hver vare ligger trygt indkapslet i klassen, og man skal ikke holde styr på en overflod af globale variable. Nej, restbeholdningen af afløbsrens findes entydigt ved f.eks. at skrive:

lRestbeholdning = Varer.item("aflobsrens").lRestbeholdning

hvis afløbsrens er i den class collection som hedder "Varer".

Man kan opbygge et helt hierarki af klasser og class collections, der ligger som kinesiske æsker inden i hinanden. For nu at blive ved vores supermarked kunne det se nogenlunde sådan ud:

Varegrupper (class collection af Varegruppeklassen)
Der er X varegrupper, f.eks. "Rengøringsartikler", "Vin", "Dybfrost" og "Slagtervarer"
Hver varegruppeklasse er samtidig en class collection af Vareklasser.
Vareklassen er en klasse for hver enkelt vare - f.eks. afløbsrens, Amarone rødvin og lammekøller.

Regnearket Hvordan man bruger klasser og class collections er et forholdsvis simpelt eksempel på brug af klasser og class collections, og det viser, hvordan man via dialogbokse kan tilføje og fjerne varer (klasser) samt manipulere med data.

Relateret: