• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

userform: Fout na klik op Ok button

Status
Niet open voor verdere reacties.

RaymondC

Gebruiker
Lid geworden
10 mrt 2008
Berichten
561
Nadat ik op de Ok knop klik in een userform (multipage) krijg ik verschillende msgboxen dat gegevens niet zijn ingevuld.

De Ok knop maakt de velden leeg, maar de msgbox moet pas komen als er op ok wordt geklikt en er is 1 veld niet ingevuld.
Zie de code hieronder (oh ja tis allemaal copy & paste van code die ik hier en op andere forums/websites heb gevonden).

Wat doe ik precies fout??

Dim ctl_Cont As Control
Dim iRow As Long
Dim ws As Worksheet

Set ws = Worksheets("Ledenlijst")
'find first empty row in database
iRow = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row

'copy the data to the database
ws.Cells(iRow, 1).Value = Me.TxtNaam.Value
ws.Cells(iRow, 2).Value = Me.TxtVoornaam.Value
ws.Cells(iRow, 3).Value = Me.TxtAdres.Value
ws.Cells(iRow, 4).Value = Me.TxtPostcode.Value
ws.Cells(iRow, 5).Value = Me.TxtGemeente.Value
ws.Cells(iRow, 6).Value = Me.TxtTelefoon.Value
ws.Cells(iRow, 7).Value = Me.TxtEmail.Value
ws.Cells(iRow, 8).Value = Me.CmbClub.Value

'clear the data
Me.TxtNaam.Value = ""
Me.TxtVoornaam.Value = ""
Me.TxtAdres.Value = ""
Me.TxtPostcode.Value = ""
Me.TxtGemeente.Value = ""
Me.TxtTelefoon.Value = ""
Me.TxtEmail.Value = ""
Me.CmbClub.Value = ""
Me.TxtNaam.SetFocus
For Each ctl_Cont In Me.Controls
If TypeName(ctl_Cont) = "TextBox" Or TypeName(ctl_Cont) = "ComboBox" Then
If ctl_Cont.Value = "" Then
MsgBox "De " & TypeName(ctl_Cont) & Space(1) & ctl_Cont.Name & " is niet ingevuld!"
End If
End If
Next

End Sub
 
Wat doe ik precies fout??

Je maakt eerst de textboxen ed leeg dan ga je controleren of ze leeg zijn.
Je moet dus eerst controleren en daarna leegmaken.

Met vriendelijke groet,


Roncancio
 
Stom had er zelf achter kunnen komen door de code nog eens rustig na te lezen.

Heb nog een bijkomende vraag:

Ik gebruik nu:

For Each ctl_Cont In Me.Controls
If TypeName(ctl_Cont) = "TextBox" Or TypeName(ctl_Cont) = "ComboBox" Then
If ctl_Cont.Value = "" Then
MsgBox "De " & TypeName(ctl_Cont) & Space(1) & ctl_Cont.Name & " is niet ingevuld!"

Maar ik heb een multipage op mijn userform, en het zou dus alleen voor die pagina moeten gecontroleeerd worden.

Wordt het dan:

For each ctl_cont in Me.Controls.Page1
 
Stom had er zelf achter kunnen komen door de code nog eens rustig na te lezen.

Heb nog een bijkomende vraag:

Ik gebruik nu:

For Each ctl_Cont In Me.Controls
If TypeName(ctl_Cont) = "TextBox" Or TypeName(ctl_Cont) = "ComboBox" Then
If ctl_Cont.Value = "" Then
MsgBox "De " & TypeName(ctl_Cont) & Space(1) & ctl_Cont.Name & " is niet ingevuld!"

Maar ik heb een multipage op mijn userform, en het zou dus alleen voor die pagina moeten gecontroleeerd worden.

Wordt het dan:

For each ctl_cont in Me.Controls.Page1

Nee.

Code:
For Each ctl_Cont In Me.MultiPage1.Pages(0).Controls

Pages(0) staat voor de 1e pagina.
Pages(2) voor de 2e, etc.

Met vriendelijke groet,


Roncancio
 
De code loopt goed, maar na de Next springt hij terug naar de For each en niet naar het begin van de code.
Moet ik nog ergens een End if zetten?

For Each ctl_Cont In Me.MultiPage1.Pages(0).Controls
If TypeName(ctl_Cont) = "TextBox" Or TypeName(ctl_Cont) = "ComboBox" Then
If ctl_Cont.Value = "" Then
MsgBox "De " & TypeName(ctl_Cont) & Space(1) & ctl_Cont.Name & " is niet ingevuld!"
End If
End If

'clear the data
Me.TxtNaam.Value = ""
Me.TxtVoornaam.Value = ""
Me.TxtAdres.Value = ""
Me.TxtPostcode.Value = ""
Me.TxtGemeente.Value = ""
Me.TxtTelefoon.Value = ""
Me.TxtEmail.Value = ""
Me.TxtClub.Value = ""
Me.TxtNaam.SetFocus

Next
 
Je kunt niet naar believen END-IF's zetten.
Het is een goed gebruik op dit forum om codes in code tags te zetten dus:

Code:
For Each ctl_Cont In Me.MultiPage1.Pages(0).Controls
    If TypeName(ctl_Cont) = "TextBox" Or TypeName(ctl_Cont) = "ComboBox" Then
        If ctl_Cont.Value = "" Then
            MsgBox "De " & TypeName(ctl_Cont) & Space(1) & ctl_Cont.Name & " is niet ingevuld!"
        End If
    End If
    
    'clear the data
    Me.TxtNaam.Value = ""
    Me.TxtVoornaam.Value = ""
    Me.TxtAdres.Value = ""
    Me.TxtPostcode.Value = ""
    Me.TxtGemeente.Value = ""
    Me.TxtTelefoon.Value = ""
    Me.TxtEmail.Value = ""
    Me.TxtClub.Value = ""
    Me.TxtNaam.SetFocus

Next
Je ziet dat de FOR bij de NEXT hoort en IF bij END IF.
De FOR.. NEXT is een lus dat inhoudt dat de code meer dan 1 keer wordt doorlopen. Door het inspringen van de tekst is de code ook veel beter leesbaar, zeker voor andere ontwikkelaars.

Waar dient de cursor naar toe te springen na de NEXT?

Met vriendelijke groet,


Roncancio
 
Volgens mij moet de Next in de code van de post hierboven boven de regel " 'clear the data" staan. Anders wordt dan onnodig veel keren uitgevoerd.
 
Volgens mij moet de Next in de code van de post hierboven boven de regel " 'clear the data" staan. Anders wordt dan onnodig veel keren uitgevoerd.

Zonder meer.
Ik heb nu niet gekeken naar de code maar uitsluitend aangegeven hoe het in de tag eruit zou (moeten) zien.

Met vriendelijke groet,


Roncancio
 
Sorry van de tags die ik niet om en bij de code heb gezet.

Heb de next verplaatst, werkt nu perfect.
Bedankt voor de hulp.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan