Krijg de focus niet op terug op tekstveld

Status
Niet open voor verdere reacties.

Woodshoe

Gebruiker
Lid geworden
2 feb 2011
Berichten
13
Hallo kenners,

ik heb een probleem met een code die de inhoud van een tekstveld op een formulier evalueert. Als dit niet voldoet aan de voorwaarde krijg ik de focus niet terug op dit veld, maar gaat het naar het eerstvolgende in het formulier.

Code:
Private Sub txtDatumVan_AfterUpdate()
On Error GoTo ErrorHandler

If txtDatumvan > Date Then
Call MsgBox("De 'Datum van' mag niet in de toekomst liggen!" & vbNewLine & vbNewLine & _
"Kies een andere datum.", vbExclamation, "Foutieve Invoer")
txtDatumvan.SetFocus
txtDatumvan = Null
Exit Sub

End If

CleanUpAndExit:
Exit Sub

ErrorHandler:
Call MsgBox("De ingevoerde datum is illegaal. Let er op dat er een correcte datum wordt ingevoerd")
Resume CleanUpAndExit

End Sub

Iemand enig idee wat ik hier fout doe?
 
En zo?

Code:
Private Sub Datum_txtDatumVan(Cancel As Integer)
    If Me.txtDatumvan > Date Then
        MsgBox "De 'Datum van' mag niet in de toekomst liggen!", vbInformation, "Verkeerde datum..."
        Cancel = True
        Me.txtDatumVan.Undo
    End If
End Sub
 
Laatst bewerkt:
Hallo OctaFish
bedankt voor je snelle reactie, maar ik ben bang dat jou suggestie niet werkt.

De Procedure reageert helemaal niet als ik een foutieve waarde invoer in het veld txtDatumvan.
Moet er in de Private Sub-regel niet iets staan als After_Update? Ik zie niet bij welke gebeurtenis deze procedure hoort.
Als het in een AfterUpdate-gebeurtenis zet herkent VBA Cancel niet (als variabele). Als ik die vervolgens als Boolean declareer gaat het goed, behalve de focus. Die gaat weer naar het volgende tekstveld (txtDatumtot)
 
Wat versta je onder een fout invoer? Vang 'm zo eens af, zou ik zeggen....

Code:
If Not IsDate(Me.txtDatumVan) Then
    If Me.txtDatumVan > Date Then
        MsgBox "De 'Datum van' mag niet in de toekomst liggen!", vbInformation, "Verkeerde datum..."
        Cancel = True
        Me.txtDatumVan.Undo
    End If
Else
    Cancel = True
    Me.txtDatumVan.Undo
End Sub
 
De code blijft helaas niks doen, maar ik heb het intussen opgelost.
Ik heb jouw eerste codesuggestie in de gebeurtenis 'bij verlaten' geplaatst. En de regel 'Me.txtDatumvan = Null' toegevoegd.

Code:
Private Sub txtDatumVan_Exit(Cancel As Integer)
If Me.txtDatumvan > Date Then
    Call MsgBox("De 'Datum van' mag niet in de toekomst liggen!" & vbNewLine & "Geef een datum die voldoet aan de regel" _
    , vbInformation, "Verkeerde datum")
    Cancel = True
    Me.txtDatumvan.Undo
    Me.txtDatumvan = Null
    End If
End Sub

Al met al met jouw hulp weer iets bijgeleerd, bedankt :d
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan