Script GoToControl werkt niet

Status
Niet open voor verdere reacties.

tonp60

Gebruiker
Lid geworden
29 jul 2009
Berichten
136
Hallo,

Ik gebruik onderstaande code in een formulier om een veld verplicht te laten invullen.
Code:
Private Sub txtLeverweek_Exit(Cancel As Integer)
If IsNull([txtLeverweek]) Then
MsgBox "U dient een leverweek in te vullen."
DoCmd.GoToControl "txtLeverweek"
End If
End Sub
Als ik het veld verlaat dan verschijnt de Messagebox. De cursor gaat echter gewoon naar het volgende veld en niet naar txtLeverweek.
Wat doe ik niet goed?
 
Is erg lastig, omdat je alleen een check kunt doen als je het object verlaat. En dan werkt de procedure niet meer, omdat je dan een ander object actief hebt. Je zult de check dus ófwel bij het activeren van de volgende control moeten doen, óf bij afsluiten/opslaan van het record. Zelf doe ik het altijd bij het laatste: ik check of alle verplichte velden zijn ingevuld, en geef dan een variabele een nieuwe waarde. Als het totaal daarvan niet klopt, moet er nog wat worden ingevuld. Ziet er ongeveer zo uit:
Code:
Dim iCheck As Integer
    iCheck = Abs(IsDate(Me.aanmelddatum))
    iCheck = iCheck + Abs(Me.voornaam & "" <> "") * 2
    iCheck = iCheck + Abs(Me.achternaam & "" <> "") * 4
    iCheck = iCheck + Abs(Not IsNull(Me.cboStraatID)) * 8
    iCheck = iCheck + Abs(Me.huisnummer & "" <> "") * 16
    iCheck = iCheck + Abs(Me.postcode & "" <> "") * 32
    iCheck = iCheck + Abs(Not IsNull(Me.geboortedatum)) * 64
    iCheck = iCheck + Abs(Not IsNull(Me.geslacht)) * 128
    iCheck = iCheck + Abs(Me.bsn & "" <> "") * 256
    Set ctl = Me.Instroom
    If ctl.ItemsSelected.Count > 0 Then
        For Each varItm In ctl.ItemsSelected
            If strItm <> "" Then strItm = strItm & "|"
            strItm = strItm & varItm
        Next varItm
        iCheck = iCheck + 512
    End If
    
    Me.cmdSluiten.SetFocus
    If Not iCheck = 1023 Then
        MsgBox "Nog niet alle verplichte velden zijn ingevuld." & vbLf & "Vul eerst alle verplichte velden in.", vbCritical
        Exit Sub
    End If

De gebruiker kan dan dus niet verder met opslaan totdat alle verplichte velden zijn ingevuld. Ik heb wel eens een uitgebreidere variant gemaakt die per veld aangeeft dat het moet worden ingevuld (die selecteer je dan met Me.Veldnaam.Setfocus) en dan loopt het proces redelijk door. Wel dus afvangen dat gebruikers op de Sluitknop etc. drukken, want als je rechtstreeks in een tabel werkt, staat er sowieso wat in. En, dat helpt ook, zorgen dat de verplichte velden ook daadwerkelijk verplicht zijn in je tabel. Dan krijg je sowieso een foutmelding bij het invullen. Ik zou overigens niet teveel moeite steken in het activeren van de juiste objecten; het is een gebruikersfout (ze vergeten wat in te vullen) en gebruikersfouten moet je niet belonen door het ze gemakkelijk te maken. Je moet ze juist helpen als ze het góed doen :).
 
Kwam er niet helemaal uit met wat je bedoelde, maar je had me wel op een idee gebracht. Heb onderstaande code gebruikt in de knop om naar de volgende stap te gaan en het werkt volgens mij.
Code:
Private Sub GaNaarStapDrie_Click()
    If IsNull([txtLeverweek]) Then
        MsgBox "De leverweek is niet ingevuld. Dit is een verplicht veld."
    DoCmd.GoToControl "txtLeverweek"
    End If
If Me.txtLeverweek.Value > 0 Then
DoCmd.Close acForm, "Frm2MaakNieuweOrder"
DoCmd.OpenForm "Frm3KoppelKlantAanOrder"
Else: DoCmd.GoToControl "txtLeverweek"
End If
End Sub
 
Constructie kan handiger (gebruik SetFocus i.p.v. GoToControl bijvoorbeeld, en gebruik Else i.p.v. een tweede IF) maar als het werkt, dan werkt het :).
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan