Multipage element - opslaan (knop) met voorwaarde dat alle invoervakken zijn gevuld

Status
Niet open voor verdere reacties.

renew000

Gebruiker
Lid geworden
7 feb 2009
Berichten
151
Hallo experts,

Ben op dit moment bezig met een multipage element waarbij op het laatste tabblad een knop staat die alles (alle invoeren in alle tabbladen in comboboxen en textboxen) dat in het multipage-element staat opslaat in een sheet.

Nu wil ik graag een extra functionaliteit toevoegen, namelijk dat voordat er daadwerkelijk opgeslagen gaat er eerst wordt gekeken of alle invoervelden gevuld zijn.
Is dit niet het geval dan zou er een melding moeten komen dat voordat er kan worden opgeslagen eerst alle velden gevuld moeten worden.
Is dit wel het geval dan zou er dus wel opgeslagen moeten worden (dit werkt al), maar ook zou er een bevestiging moeten komen dat alles opgeslagen is.

Indien noodzakelijk dan kan ik wel een voorbeeldbestandje in elkaar kunnen zetten (helaas is in het daadwerkelijke bestand gevoelige informatie opgenomen en kan ik deze niet posten)

Alvast bedankt voor jullie hulp

Greetz
Renew
 
Een bestand met de form an sich zou al helpen, zonder extra data. Tenminste ik neem aan dat de form geen data nodig heeft om te laden?
 
Op aanvraag toch maar een voorbeeldbestandje in elkaar gezet wat op hetzelfde neer komt als het echte bestand.

Het is dus de bedoeling dat wanneer er op de knop geklikt wordt er eerst wordt gekeken of alle verplichte velden gevuld zijn.
In dit geval snap ik dat niet iedereen een fax/mobiel heeft dus deze 2 zouden dan ook niet verplicht hoeven te zijn.
Als er aan deze voorwaarde wordt voldaan kunnen de gegevens worden weggeschreven op blad1 (=database) met melding dat gegevens zijn opgeslagen.
Als er niet aan de voorwaarden wordt voldaan zal er een melding moeten zijn dat niet alle verplichte velden zijn ingevoerd.
Het mooiste zou uiteraard zijn dat deze " niet ingevulde textvakken" een kleur (bijvoorbeeld rood) zouden krijgen.

Echt superbedankt voor (een deel van) de oplossing

Groetjes
Renew
 

Bijlagen

  • voorbeeldformulier.xls
    25,5 KB · Weergaven: 45
Dit is de basiscode. Ik heb helaas nu geen tijd meer om het verder uit te werken, maar ik zou zeggen speel er eventueel al een beetje mee:

Code:
Private Sub cmdOpslaan_Click()

For Each pagina In MultiPage1.Pages
    For Each ding In pagina.Controls
       
        If TypeName(ding) = "TextBox" Then
            If ding.Text = "" Then
                MsgBox ("graag " & ding.Name & " invullen")
            End If
        End If
    Next ding
Next pagina

End Sub

Ik begrijp dat dit nu nog verre is van wit je wil precies wil, maar dit gaat de basis worden
 
Zie er goed uit Wampier :)

Heb deze code alvast in een kopie van mijn bestand verwerkt en aangepast wat er nu aan aangepast kan worden.
Heb geprobeerd om de code ook van toepassing te maken op de comboboxen maar vooralsnog lukt dat nog niet helemaal.
Kan dan ook niet wachten om de rest van jouw interpretatie van deze "case" te zien.

Iig alvast bedankt voor deze voorzet...

Greetz
 
Code:
Private Sub cmdOpslaan_Click()

For Each pagina In MultiPage1.Pages
    For Each ding In pagina.Controls
        If TypeName(ding) = "TextBox" Then
            ding.BackColor = RGB(255, 255, 255)
            If ding.Text = "" And (ding.Name <> "txtFax" And ding.Name <> "txtMobTel") Then
                MultiPage1.Value = teller
                ding.BackColor = RGB(255, 0, 0)
                MsgBox ("graag " & ding.Name & " invullen")
                ding.SetFocus
                Exit Sub
            End If
        End If
        Next ding
    teller = teller + 1
Next pagina
msgbox("correct ingevoerd")
End Sub


Private Sub UserForm_Initialize()
MultiPage1.Value = 0
End Sub

Je kunt in de "TAG" van elke textbox de "vriendelijke" naam van de textbox zetten en dan de TAG in de msgbox tonen
 
Helemaal geweldig Wampier,

Loop alleen nog tegen 1 ding aan... sorry sorry sorry, maar ik heb ik mijn voorbeeldbestandje geen comboboxen gezet, terwijl deze er in het origineel wel zijn.
Nu geeft de code alleen voor de textboxen aan dat er niets is ingevoerd... is het mogelijk met een soort "or"-functie om ook deze mee te nemen?
Zou echt geweldig zijn...

Btw.. mag ik je vragen op welke manier jij zo'n expert bent geworden??? Jouw kennis doet mij naar meer verlangen :)

Greetz
renew
 
@snb

Dit is inderdaad ook een mooie manier om het formulier grafisch aantrekkelijker te maken.. thanks voor je bijdrage..

greetz
renew
 
Expert? verre van, ik heb voor vandaag nog nooit een textbox controle gebouwd :) Mijn ervaring met VBA is minder dan twee jaar. Ik programmeer (hobby) echter al 20 jaar. Een beetje kennis van de opbouw van microsoft objects en een beetje nadenken is echter meestal voldoende. 90% van de specialistische commando's uit de macro boven heb ik rechtstreeks uit de helpfile. Voor vanavond wist ik ook niet dat je een multipage object van pagina kon veranderen via de value property. Hetzelfde geldt voor "setfocus" en "typename".

Wat betreft comboboxes deze regel hanteert de filtering:

TypeName(ding) = "TextBox"
 
haha.. oke dan...ik ben me hetzelf net aan het aanleren :) geen boekentips ofzo? of leer je alles door het te doen :)

als die line het filteren regelt dan kan ik die niet zomaar weghalen... dan gaat hij ook mijn labels meenemen..hmmm
Kan ik niet een "and-functie" gebruiken om ook de combo's eruit te filteren?
 
Je kunt "OR" gebruiken. Of anders het block kopieren en daar "combobox" invullen. AND is niet zo handig, niet veel opbjecten zijn textbox EN combobox :p
 
ik heb nu geprobeerd de OR functie te gebruiken, maar hij pakt nog steeds die comboboxen niet mee...

Neem tenminste aan dat onderstaande aanpasiing voldoende was...

If TypeName(ding) = "TextBox" Or TypeName(ding) = "combobox" Then
 
in 1 keer:

Code:
If instr("textcomb",lcase(left(TypeName(ding),4))>0 Then
 
Ik heb beide oplossingen geprobeerd...

de eerste oplossing om exact de juiste naam te gebruiken lukt helaas niet... ik krijg geen foutmelding en eigenlijk werkt alles precies hetzelfde zonder de code voor de comboboxen mee te nemen :(

de tweede oplossing geeft bij mij foutmeldingen... Is dit wel een oplossing die is gericht op de versie 2003?

Is er toevallig iets in het script dat nog meer veranderd moet worden?

Thanks voor het meedenken...
 
Je wilde het toch leren :)

Probeer eens zoiets:

Private Sub cmdOpslaan_Click()
Code:
For Each pagina In MultiPage1.Pages
    For Each ding In pagina.Controls
        msgbox (TypeName(ding))
    Next ding
Next pagina
msgbox("correct ingevoerd")

Dan kun je nagaan waar je op moet vergelijken. Hoofdletters in kleine letters zijn dus belangrijk tenzij je dat specifiek afvangt.
 
Lees de boeken van Guy Hart Davis over VBA.
 
He hoi beide,

Heb echt alles geprobeert maar krijg t niet voor elkaar :(

Zouden jullie anders in het voorbeeldbestandje dat ik heb gepost een poging willen doen..

Oja.. nog een kleine aanvulling... wat mij betreft mogen alle in te vullen velden wel rood zijn in het begin en als ze zijn ingevoerd de standaardkleur.

thanks en greetz

ps.. dat boek.. is daar ook een gratis ebookversie van ;)
 
Waarvoor ging ook alweer de zon op ?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan