Meerdere If argumenten in één VBA script

Status
Niet open voor verdere reacties.

tonp60

Gebruiker
Lid geworden
29 jul 2009
Berichten
136
Hallo,

Ik heb een vraag waarvan ik denk dat het eenvoudiger moet kunnen, maar ik weet niet hoe en kan jullie advies wel gebruiken.

Ik gebruik het volgende scriptje in een formulier om een bepaalde waarde toe te kennen aan een veld.
Code:
Private Sub Profielnaam_AfterUpdate()
If Me.Profielnaam = "WDS1001" Then
        Me.txtOverlappinginmm.Value = "26"
    ElseIf Me.Profielnaam = "WDS1002" Then
        Me.txtOverlappinginmm.Value = "12"
EndIf
EndSub

Als ik een bepaald profiel selecteer moeten er echter nog meer specifieke waardes toegekend worden aan andere velden. Dit zou ik dan kunnen doen als volgt:
Code:
Private Sub Profielnaam_GotFocus()
If Me.Profielnaam = "WDS1001" Then
        Me.txtDwarsprofielbreedteinmm = Me.txtDeurbreedteinmm.Value - 53
    ElseIf Me.Profielnaam = "WDS1002" Then
        Me.txtDwarsprofielbreedteinmm = Me.txtDeurbreedteinmm.Value - 24
EndIf
EndSub

en

Code:
Private Sub Profielnaam_LostFocus()
If Me.Profielnaam = "WDS1001" Then
        Me.txtGlasbreedteinmm = Me.txtDeurbreedteinmm.Value - 38
    ElseIf Me.Profielnaam = "WDS1002" Then
        Me.txtGlasbreedteinmm = Me.txtDeurbreedteinmm.Value - 11
EndIf
EndSub

Is het mogelijk om al deze variabelen uit te voeren in één scriptje. Ik bedoel ik selecteer het profiel WDS1001 in het formulier en alle 3 de scriptjes worden tegelijkertijd uitgevoerd?
M.a.w. de genoemde velden worden gevuld met de waardes zoals vermeld in de scriptjes.

Ik ben benieuwd of het kan en hoe ik dit dan moet opnemen in een script.

Groet,
Ton
 
Zo?
Code:
Private Sub Profielnaam_AfterUpdate()
    Select Case Me.Profielnaam
        Case "WDS1001"
            Me.txtDwarsprofielbreedteinmm = Me.txtDeurbreedteinmm.Value - 53
            Me.txtGlasbreedteinmm = Me.txtDeurbreedteinmm.Value - 38
            Me.txtOverlappinginmm.Value = "26"
    
        Case "WDS1002"
            Me.txtDwarsprofielbreedteinmm = Me.txtDeurbreedteinmm.Value - 24
            Me.txtGlasbreedteinmm = Me.txtDeurbreedteinmm.Value - 11
            Me.txtOverlappinginmm.Value = "12"
    End Select
End Sub
 
Laatst bewerkt:
Zet je profielwaarden per profielnaam in een tabel en gebruik een keuzelijst in je formulier.

Tardis
 
Vergeet de tip van edmoor, en doe wat tardis zegt, en gebruik tabellen voor keuzelijsten. Je bent een database aan het maken, geen knullig excelletje :)
 
Wat Tardis en jij geven is een oplossing van een probleem, en in dat opzicht inderdaad de juiste.
Wat ik zei is een antwoord op de directe vraag, daar zit verschil tussen.
 
Ik prefereer het (en Tardis ook) om (in ieder geval in het Access forum) oplossingen te geven die daadwerkelijk iets bijdragen aan het oplossen van een probleem binnen de database. En nu moet ik maar hopen dat TS dat ook oppakt.... Zo niet, dan is dat natuurlijk zijn eigen keuze.
 
Meedenken met TS kan natuurlijk nooit kwaad en wat dat betreft is jullie advies uiteraard helemaal correct :)
 
Enige dat telt is dat TS geholpen is.

Tardis
 
Beste Forumleden,

Ik heb i.v.m. gemak de oplossing gebruikt van Edmoor. Ik ga de optie die Tardis aandraagt, ondersteunt door Octafish, ook proberen. Dit omdat dan eventuele wijzigingen en aanvullingen makkelijker te doen zijn.
Ik neem aan dat ik als ik er niet uit kom altijd weer op het forum terecht kan.
In ieder geval bedankt voor jullie oplossingen en het mee denken.

Groet,
Ton
 
De door ons aangedragen optie is vele malen makkelijker, en veel beter geschikt voor een database. Ik had eigenlijk verwacht dat je hem al geïmplementeerd zou hebben :). Kleine hint: als de waarden van de profielen altijd hetzelfde zijn (en waarom zouden ze dat niet zijn?) dan heb je de hele constructie niet eens nodig! Het enige dat je namelijk opslaat in je tabel, is het ProfielID. De overige waarden zijn afgeleide gegevens en die kun je dus wel laten zien op een formulier/rapport, maar sla je niet op in een tabel.
Je tabel bevat dus waarden voor [ProfielID], [ProfielNaam], [Dwarsprofiel], [Glasprofiel] en [Overlappinginmm]. En wellicht nog wat andere waarden. In je keuzelijst kies je een profiel (op basis van Profielnaam) en sla je het ProfielID op in de tabel. En met de opdrachten Me.cboProfiel.Column(2) en Me.cboProfiel.Column(3) lees je de waarden van resp. deurbreedte en overlapping uit. en die gebruik je dus in je verdere berekeningen.

De tekstvakken krijgen dan deze 'formules' als Besturingelemenstbron:
txtDwarsprofielbreedteinmm: = Me.txtDeurbreedteinmm.Value - cboProfiel.Column(2)
txtGlasbreedteinmm: = Me.txtDeurbreedteinmm.Value - cboProfiel.Column(3)
txtOverlappinginmm.Value: = cboProfiel.Column(4)

En meer hoef je niet te doen. Zodra je een nieuw profiel toevoegt, en de waarden hebt ingevuld, kun je het profiel gelijk gebruiken.
 
Beste forumleden,

Ik heb de optie zoals voorgesteld door OctaFish uitgewerkt en geloof het of niet, ik heb het draaiend gekregen. Hierop voortbordurend kwam er nog een andere vraag naar boven m.b.t. een rapport/formulier. Ik zal deze apart stellen, want ik denk dat de beheerder dit fijner vindt.
In ieder geval bedankt voor de aangereikte hulp.

Groet
 
Prima dat het gelukt is :thumb:. Op naar de volgende vraag!
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan