hulp gezocht met formulier maken

Status
Niet open voor verdere reacties.

Twomax

Gebruiker
Lid geworden
17 jan 2015
Berichten
113
Wie kan me erbij helpen als ik in een formulier drie zaken heb staan waarvan minimaal een ingevuld moet worden.

Bijvoorbeeld: plaats, lokatie en zone

Ik wil dat het formulier niet afsluit als niet een van de drie is ingevuld en daarbij wil ik dat er een bericht op het scherm verschijnt.

Vond zelf zoiets in een begindatum en einddatum formulier maar hoe schrijf ik dit nu voor mijn voorbeeld

Code:
If IsNull([Begindatum]) Or IsNull([Einddat]) Then
        MsgBox "U moet zowel begin- als einddatums opgeven."
        DoCmd.GoToControl "Begindatum"
    Else
        If [Begindatum] > [Einddat] Then
            MsgBox "De Einddatum moet na de Begindatum vallen."
            DoCmd.GoToControl "Begindatum"
        Else
            Me.Visible = False
        End If
    End If
 
Laatst bewerkt door een moderator:
Beetje knullige code, maar daar gaat het denk ik niet om. Ik zou in ieder geval op het formulier alle standaard sluitopties uitschakelen (knoppen, sneltoetsen) en een eigen knop maken om af te sluiten. Die knop schakel je standaard uit, zodat je het formulier niet meer af komt. Tenzij als aan alle voorwaarden is voldaan, dan wordt de knop actief.
Met een functie check je of de velden ingevuld zijn of niet. Dat doe je dan bij de gebeurtenis <Na bijwerken> van de tekstvelden.

Code:
     If CheckVelden = True Then cmdSluiten.Enabled = True Else: cmdSluiten.Enabled = False

Die functie ziet er dan zo uit:
Code:
Function CheckVelden() As Boolean
    If Not Me.Plaats = vbNullString Then
        CheckVelden = True
    End If
    If Not Me.lokatie = vbNullString Then
        CheckVelden = True
    End If
    If Not Me.zone = vbNullString Then
        CheckVelden = True
    End If
End Function
 
Laatst bewerkt:
Code:
Function CheckVelden() As Boolean
    If Not Me.Plaats = vbNullString Then
        CheckVelden = True
    End If
    If Not Me.lokatie = vbNullString Then
        CheckVelden = True
    End If
    If Not Me.zone = vbNullString Then
        CheckVelden = True
    End If
End Function

dus zoiets moet ik dan onder de gebeurtenis zetten? Trouwens super hoe snel jij overal op reageerd :)
Heb wel nog een vraag deze formule checkt maar sluit deze ook daarna het formulier??
 
Laatst bewerkt door een moderator:
Oke If CheckVelden = True Then cmdSluiten.Enabled = True Else: cmdSluiten.Enabled = False zit onder de knop afsluiten en de rest zit onder de tekstvelden
Waar zet ik de formule If CheckVelden = True Then cmdSluiten.Enabled = True Else: cmdSluiten.Enabled = False ???
 
Je hebt 'm nog niet helemaal begrepen. Je hebt 3 tekstvelden, die alledrie gevuld moten worden. Elk tekstveld moet gecheckt worden met de functie, maar op het moment dat je klaar bent met het invullen van een tekstveld. Er kan maar één tekstveld actief zijn, dus bij de gebeurtenis <Na bijwerken> moet je altijd ook de andere 2 checken. En dat doet die functie dus. De eerste code regel (zou je trouwens code willen opmaken met de CODE knop?) herhaal je dus bij elk tekstveld.
 
nou ik begreep wel dat ik bij de drie velden de

Code:
Function CheckVelden() As Boolean
If Not Me.Plaats = vbNullString Then
CheckVelden = True
End If
If Not Me.lokatie = vbNullString Then
CheckVelden = True
End If
If Not Me.zone = vbNullString Then
CheckVelden = True
End If
End Function

onder de gebeurtenis moet zetten maar waar zet ik die andere regels zodat de knop sluiten actief wordt. >>>>> If CheckVelden = True Then cmdSluiten.Enabled = True Else: cmdSluiten.Enabled = False
er zal toch ergens een verwijzing naar de knop moeten zijn
En er hoeft maar een van de drie ingevuld te worden dan mag de knop al actief worden
 
Laatst bewerkt door een moderator:
Dan heb ik je vraag niet helemaal goed gelezen; ik dacht dat alle 3 de velden ingevuld moesten worden. Dan kan de check een stuk simpeler:
Code:
Private Sub Lokatie_Change()
    Me.cmdSluiten.Enabled = Len(Me.lokatie.Text) > 0
End Sub

Code:
Private Sub Plaats_Change()
    Me.cmdSluiten.Enabled = Len(Me.Plaats.Text) > 0
End Sub

Code:
Private Sub Zone_Change()
    Me.cmdSluiten.Enabled = Len(Me.Zone.Text) > 0
End Sub
 
Moet ik deze code ergens in het tekstveld zetten en zo ja waar?
En de andere codes kan ik dan vergeten?
Kan er dan ook een bericht verschijnen? Then
MsgBox "U moet plaats of zone of ...invullen
.
 
Laatst bewerkt door een moderator:
Waarom heb je het hele bericht gequoot? Is nergens voor nodig, want mijn berichtje staat er gewoon boven, en haal ik ook niet weg :). Iets wat ik dan weer wél hoop dat je met die quoot gaat doen :)
De code kun je gewoon op de modulepagina van je formulier zetten; als het goed is (en de tekstvakken dezelfde naam hebben als in mijn code) zal het gelijk werken. Een Msgbox lijkt mij in dit geval nogal irritant voor de gebruiker, want wanneer moet dat verschijnen? Er hoeft maar één veld ingevuld te worden, dus als je de andere 2 leeg laat is het al prima wat jou betreft. Dus wanneer moet die melding dan komen? Mij lijkt het niet nodig.
 
Nou beetje neuzen beetje rommelen kom je ook al verder :P

Heb de volgende code onder de afsluitknop gezet en het werkt :)

Code:
Private Sub Knop62_GotFocus()
If IsNull([zone]) Then
   If IsNull([lokatie]) Then
     If IsNull([reserve]) Then
MsgBox "U moet een van de volgende velden invullen zone/lokatie/reserve."
DoCmd.GoToControl "zone"

maar dit zal nog beter kunnen dat het bij elke knop zoals volgend record vorig record en bij afsluiten werkt .....waar moet ik zo'n code dan zetten????
        End If
    End If

End If
End Sub
 
Laatst bewerkt door een moderator:
Maar je hebt in dit draadje al een vba code neergezet in je module :D.
 
Als ik in het formulier meerdere velden heb waarvan er drie zijn waar minimaal 1 moet ingevuld worden!
Hoe kan ik de gebruiker dan dwingen maar een van deze drie in te vullen.
de velden waarvan minimaal 1 moet zijn in gevuld is zone, zone1, zone3 overigens zijn dit velden die als keuzelijst met invoervlak staan.

Dus verplicht 1 van de drie en dan een bericht als er twee worden ingevuld of als men ze niet invult ook melding

Heel graag een uitgebreid antwoord daar ik nog vrij nieuw ben in dit gebeuren. Heb dit al eerder op het forum gevraagd maar nog steeds geen oplossing die ik begrijp
 
Die functie die ik heb gemaakt checkt of één van de 3 velden gevuld is. Hij levert dan TRUE als uitkomst. Is er niks ingevuld, dan is de uitkomst dus FALSE. Op basis daarvan kun jij maken wat je wilt. Meer heb je niet nodig. Wil je afdwingen dat er maar één waarde mag worden ingevuld, en niet meer dan 1 dan moet je de functie veranderen. Ik zou er dan een teller van maken die telt hoeveel velden er zijn ingevuld. Overigens had een db voorbeeldje je vraag waarschijnlijk al lang opgelost, want ik snap er nog steeds bar weinig van.
 
Kun je me een voorbeeld laten zien van hoe zo'n teller werkt??
 
Je zou die functie zelf wel moeten kunnen aanpassen. I.p.v. een boolean op True zetten, zou je een getal met 1 moeten ophogen. Dus in de functie definieer je een variabele als getal, en als een tekstveld niet 0 is verhoog je het getal met 1. De functie zelf retourneert dan geen Boolean meer maar een integer.
 
Hoe kan ik een voorbeeld DB plaatsen ?
 
Laatst bewerkt:
If CheckVelden = 20 Then cmdSluiten.Enabled = True Else: cmdSluiten.Enabled = False komt dan in formulier na bijwerken?

maar hoe maak ik hier een tel functie van?
Private Sub Zone_Change()
Me.cmdSluiten.Enabled = Len(Me.Zone.Text) ......????
End Sub
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan