Access 2016 VBA. Varabelen tussen twee subs (sub en sub knop) transporteren (passing)

Status
Niet open voor verdere reacties.

KPTPTT

Gebruiker
Lid geworden
2 mrt 2018
Berichten
321
Hallo. Ik maak gebruik van een sub die oa. een keuzelijst uitleest en drie variabelen sAdres en sNum en sPlaats genereerd. Als ik een wisselknop op hetzelfde formulier aanklik, dan moeten in de "sub Wisselknop451_Click()" de drie variabelen worden ingevoegd. In deze sub maak ik nl. gebruik van deze variabelen.

Ik heb met dergelijks in een andere situatie met de instructie (ByVal sAdres As String, sNum As String) etc. succesvol opgelost, maar dan wordt in de eerste sub de tweede sub aangeroepen met Call etc. In dit geval wordt de tweede sub Wisselnop niet vanuit de eerste sub opgeroepen. Het betreft hetzelfde formulier.

Hoe kan ik het oplossen? Alvast bedankt.
 
Laatst bewerkt:
Procedures aanroepen vanuit een andere procedure hoeft al jaren niet meer met Call te gebeuren, al mag dat natuurlijk best, fout is het niet. Maar er is dus geen verschil tussen
Code:
Sub cboKeuzelijst_CLick()
     Wisselknop451_Click()
End Sub
en
Code:
Sub cboKeuzelijst_CLick()
     Call Wisselknop451_Click()
End Sub

Beide procedures werken even goed. Jouw probleem is simpeler, want heeft te maken met de manier waarop je de variabelen declareert.
Code:
Sub cboKeuzelijst_CLick()
Dim sAdres as String, sNum as String, sPlaats as String
     Wisselknop451_Click()
End Sub

zal waarschijnlijk niet werken, maar dit:

Code:
Dim sAdres as String, sNum as String, sPlaats as String
Sub cboKeuzelijst_CLick()
     Wisselknop451_Click()
End Sub

waarschijnlijk wel. Daarbij moeten de variabelen in het tweede voorbeeld dus helemaal bovenin de procedure staan. De reden? Variabelen hebben een scope; dat is zeg maar de 'levensduur' van een variabele. Als je de variabele binnen een procedure declareert, werkt hij alleen maar binnen die procedure. Wil je de gegevens 'meenemen' naar een andere procedure, dan moet je ze als parameters meegeven. Het alternatief is om de variabelen te declareren binnen de module (tweede voorbeeld). Hierbij blijven de variabelen hun waarde houden zolang het formulier open staat. Een nog zwaardere optie is om de variabelen in een aparte module te zetten, en ze als Public te declareren, dan blijven ze hun waarde houden gedurende de tijd dat de database open is. Ook dat kan wel eens handig zijn.

Nog robuuster is het trouwens om, als je de laatste variant nodig hebt, om daarvoor TempVars te gebruiken. Maar dat is een iets ander verhaal.
 
Dank voor je heldere en leerzame uitleg. Ik had al zoiets geprobeerd maar als Public en niet helemaal correct gedeclareerd en dat ging niet goed. Ik heb nu bovenaan de drie variabelen gedeclareerd en het werkt. Bj mij gaat het wel om twee aparte en niet geneste sub's. De variabelen van de Keuzelijst sub bovenin gedeclareerd en deze toegepast in de sub van de knop. Ik presenteer de gegevens van 10 records in een formulier en met de knop wil ik de volgende tien kunnen presenteren.
 
Laatst bewerkt:
Ik presenteer de gegevens van 10 records in een formulier en met de knop wil ik de volgende tien kunnen presenteren.
Dat riekt meer als een bladerknop, dan als een actie met variabelen :). Een # aantal records vooruit of achteruit laten zien, zou ik anders programmeren.
 
Het is, dankzij VBA, een handzame en waardevolle database geworden. Je zou het moeten zien. :) Dank voor alles.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan