Combobox met 2 events

Status
Niet open voor verdere reacties.

masala09

Gebruiker
Lid geworden
6 aug 2012
Berichten
886
Ik heb met onderstaande code behoorlijk zitten puzzelen. Ik wist niet eens dat er meerdere events gebruikt konden worden bij een object. In dit geval een combobox. In ieder geval het werkt.

Code:
Private Sub Cmb_Omschrijving_Change()
    
    Select Case Cmb_Omschrijving.Value
        Case Is = vbNullString
            Cmb_Omschrijving.SetFocus
        Case Else
            With TextBox2
                .Enabled = True
                .BackColor = Wit
                .SetFocus
            End With
    End Select
    
End Sub

Private Sub Cmb_Omschrijving_Exit(ByVal Cancel As MSForms.ReturnBoolean)

    If Cmb_Omschrijving.Value = vbNullString Then
        MsgBox ("U dient een waarde in te voeren")
        Cancel = True
    End If
    
End Sub

Maar is deze manier omslachtig en of is er een ander event wat beide routines opvangt zodat beide routines in 1 routine geplaatst kan worden. Tevens heb ik dan ook meteen de manier gevonden om in een ander userform alwaar ik ook tegen een dergelijk probleem met setfocus in de knel kwam. Daar speelt het probleem, ondanks dat de objecten nu in juiste tabvolgorde staan, nog steeds.
 
Laatst bewerkt:
Ik wist niet eens dat er meerdere events gebruikt konden worden bij een object.
Wat leesvoer:
http://www.cpearson.com/excel/Events.aspx

Per object kun je in de VBA editor rechts bovenin zien welke events er allemaal zijn. Dat zijn er een paar meer dan twee.

ekfhaa.jpg
 
Laatst bewerkt:
Edmoor. Yep dat weet ik, maar ik dacht dat je niet meer dan 1 event per object kon gebruiken. Ik heb dit eigenlijk bewust uitgeprobeerd en met resultaat. Daarna ben ik gaan kijken wat voor mijn gevoel het meest logische was en die gebruikt waarna ik op deze 2 uitkwam. Maar ik dacht misschien is er een event die beide events opvangt en dat ik de code moet aanpassen.
 
Nee, dat is er niet, vanwege het feit dat je dat simpel zelf kunt regelen:

Code:
Private Sub Cmb_Omschrijving_Change()
    Call BehandelBeideEvents("Change")
End Sub


Private Sub Cmb_Omschrijving_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Call BehandelBeideEvents("Exit")
End Sub


Private Sub BehandelBeideEvents (Byval Gebeurtenis as String)
    Select Case Gebeurtenis
        Case "Change"
            Msgbox "gebeurtenis 1"
        Case "Exit"
            Msgbox "gebeurtenis 2"
        Case Else
            Msgbox "Wat je maar meegegeven hebt"
    End Select
End Sub
 
Laatst bewerkt:
Dan kan ik het, lijkt mij dan, gewoon laten voor wat het is dan, want als ik dit zou overnemen dan heb ik in feite gewoon onnodig typewerk. Of dit moet stabieler of beter zijn.
 
Qua stabiliteit maakt het niks uit en als er bij elk event iets anders moet gebeuren kun je het makkelijker laten zoals het is. Ik wilde met mijn voorbeeld alleen maar aantonen dat het eenvoudig mogelijk is om door meerdere events 1 en dezelfde routine te laten uitvoeren en tevens op het event zelf te reageren.
 
Laatst bewerkt:
Oke dan. Maar ik snap je punt en daarbij weer iets geleerd. Eigenlijk 2 dingen. De toevoegingen bij achter Call. :D
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan