Er zijn verschillende manieren om een teller te implementeren in een VBA -project voor Excel, afhankelijk van de reikwijdte en het doel van de balie. Hier zijn een paar benaderingen:
1. Een variabele op module-niveau gebruiken:
Dit is de eenvoudigste aanpak voor een wereldwijde teller die blijft bestaan tijdens de VBA -sessie (totdat het Excel -bestand is gesloten).
`` `vba
Optie expliciet
Particuliere teller als lang de tegenvariabele verklaart
Sub incrementcounter ()
Teller =Teller + 1
Msgbox "tellerwaarde:" &teller
Einde sub
Sub resetcounter ()
Teller =0
Msgbox "teller gereset naar 0"
Einde sub
`` `
* `optie expliciet`: Dit is cruciaal voor goede coderingspraktijken. Het dwingt je om alle variabelen expliciet te verklaren.
* `privé -teller zo lang`: Dit verklaart een variabele met de naam 'teller' van type 'long' (een lang geheel getal), die grotere aantallen kan bevatten dan 'gehele getal'. Het trefwoord `private` maakt het alleen toegankelijk binnen de module waarin het is aangegeven.
* `incrementcounter` en` resetcounter` subroutines: Deze laten zien hoe ze de teller kunnen verhogen en resetten.
2. Een werkbladcel gebruiken als teller:
Deze methode slaat de teller op in een specifieke cel op een werkblad. De teller blijft bestaan, zelfs als Excel wordt gesloten en heropend (tenzij de celwaarde handmatig wordt gewijzigd).
`` `vba
Sub incrementworksheetcounter ()
Dim WS als werkblad
Set ws =thisworkbook.sheets ("sheet1") "wijzigen" blad1 "op uw bladnaam
WS.Range ("A1"). Value =WS.Range ("A1"). Waarde + 1 'verhoogt de teller in cel A1
MSGBox "Counter Value:" &ws.Range ("A1").
Einde sub
Sub resetworksheetcounter ()
Dim WS als werkblad
Set ws =thisworkbook.sheets ("sheet1") "wijzigen" blad1 "op uw bladnaam
WS.Range ("A1"). Waarde =0
Msgbox "teller gereset naar 0"
Einde sub
`` `
* Deze benadering is persistenter dan een variabele op module-niveau, maar het is gebaseerd op een specifieke cel en is daarom minder schoon vanuit een puur VBA-perspectief.
3. Een klassemodule gebruiken voor een meer ingekapselde teller:
Dit is een meer geavanceerde aanpak die een betere organisatie en herbruikbaarheid biedt. Een klassenmodule maakt een aangepast object dat de gegevens en methoden van de teller inkapselt.
`` `vba
'In een klassenmodule (bijv. "Counterclass"))
Optie expliciet
Privé -tegenwaarde zo lang
Openbaar eigendom krijgt counter () zo lang
Teller =tegenwaarde
Einde eigenschap
Public Sub -increment ()
tegenwaarde =tegenwaarde + 1
Einde sub
Public Sub Reset ()
tegenwaarde =0
Einde sub
'In een standaardmodule
Sub usecounterclass ()
Dim Mycounter als tegenklasse
Set mycounter =nieuwe tegenklasse
mycounter.incement
Debug.print "Tellerwaarde:" &Mycounter.counter
mycounter.incement
Debug.print "Tellerwaarde:" &Mycounter.counter
mycounter.reset
Debug.print "Tellerwaarde:" &Mycounter.counter
Set myCounter =niets 'belangrijk:laat het object uit het geheugen los
Einde sub
`` `
* klassenmodule Voordelen: Betere codeorganisatie, herbruikbaarheid (u kunt meerdere tegenobjecten maken) en het verbergen van gegevens (de `contrawaarde 'is privé).
Het kiezen van de juiste aanpak:
* Variabele op module-niveau: Eenvoudigst voor een enkele, tijdelijke teller binnen een enkele VBA -sessie.
* Werkbladcel: Het beste voor persistentie over Excel -sessies, maar minder elegant vanuit een coderingsstandpunt.
* Klasse module: Het beste voor complexe scenario's, meerdere tellers of wanneer u een betere codeorganisatie en herbruikbaarheid nodig hebt. Dit is over het algemeen de aanbevolen aanpak voor alles buiten een zeer eenvoudige teller.
Vergeet niet om `" Sheet1 "` te vervangen door de werkelijke naam van uw werkblad als u de werkbladcelmethode gebruikt. Kies de aanpak die het beste bij uw behoeften en coderingsstijl past. Voor de meeste toepassingen buiten eenvoudige tellers wordt het gebruik van een klassenmodule sterk aanbevolen voor een betere organisatie en onderhoudbaarheid. |