keuzelijst met invoervlak indien niet in lijst automatisch aanvullen???

Status
Niet open voor verdere reacties.

Twomax

Gebruiker
Lid geworden
17 jan 2015
Berichten
113
Als ik in een formulier zit is het dan mogelijk om in een keuzelijst met invoervlak automatisch deze wordt aangevuld als iets nog niet erin staat?

Is het dan ook mogelijk om bijv in het veld straatnaam ook het veld Gemeente meteen aan te vullen?
 
Laatst bewerkt:
Iets automatisch aanvullen wat er nog niet is, is natuurlijk onmogelijk. Het moet er eerst zijn ;) Maar ik vermoed wel wat je bedoelt: je wilt iets kiezen uit een keuzelijst, dus je begint enthousiast te typen in de keuzelijst, en dan blijkt dat de ingetypte tekst niks vind. En dan wil je die nieuwe waarde eigenlijk gelijk toevoegen. Ja, dat kan. Je hebt de gebeurtenis <Bij niet in lijst> die hier juist is bedacht :). Deze wordt getriggerd als je de keuzelijst verlaat, en kan dan ofwel een formulier openen waarmee je de tabel kunt bewerken die onder de keuzelijst hangt, ofwel met een toevoegquery gelijk het nieuwe record toevoegen. Welke van de 2 voor jou het beste werkt hangt van de tabel af.
 
Denk die tweede dan als ik begin te tikken en de waarde verschijnt niet doordat deze niet in de lijst staat wil ik dat deze waarde erbij komt. Moet ik nu een toevoeg query eronder hangen??

zet ik deze query dan in een macro of via programmacode. Deze laatste zal wel de lastige zijn :P
 
Laatst bewerkt:
Zoals ik al zei: je moet dan de gebeurtenis <Bij niet in lijst> gebruiken. Als je zoekt op NotInList in dit forum, vind je wat voorbeeldjes, bijvoorbeeld deze.
 
Helaas krijg ik die bestanden niet open accdb :shocked: had ik maar een vrijwilliger naast me wonen :P
 
Private Sub overige_lokatie_NotInList(NewData As String, Response As Integer)
Dim stDocName As String
Dim stLinkCriteria As String

stDocName = "invoer lokatie"
DoCmd.OpenForm stDocName, , , stLinkCriteria
End Sub

gebruikt maar dan bij het afsluiten van het formulier invoer lokatie zie ik hem niet verschijnen tenzij ik uit het andere formulier ga
 
Heb een voorbeeldje gevonden dat wél was om te zetten :).
 

Bijlagen

Nou weet niet of ik daar wel wijs uit wordt tis een puzzle :confused:
 
En om de twee technieken nog even uit te leggen, hier wat meer info.
De eerste techniek is simpel: je voegt de nieuwe waarde toe aan een tabel. Dat gaat zo:

Code:
Private Sub kzl_merk_NotInList(NewData As String, Response As Integer)
    If NewData = "" Then Exit Sub
    Msg = "'" & NewData & "' staat niet in de lijst." & vbCr & vbCr
    Msg = Msg & "Wil je deze toevoegen?"
    i = MsgBox(Msg, vbQuestion + vbYesNo, "Onbekende naam . . ")
    If i = vbYes Then
        strSQL = "INSERT INTO tbl_merk ([Merk]) VALUES ('" & NewData & "');"
        CurrentDb.Execute strSQL, dbFailOnError
        Response = acDataErrAdded
    Else
        Response = acDataErrContinue
    End If
End Sub
Je gebruikt dus een Toevoegquery om het nieuwe record aan te maken. Met Response stel je de keuzelijst opnieuw op scherp.

Bij een formulieraanroep moet er iets meer gebeuren. Dat ziet er zo uit:

Code:
Private Sub Achternaam_NotInList(NewData As String, Response As Integer)
Dim Msg As String
    If NewData = "" Then Exit Sub
    Msg = "'" & NewData & "' Deze Achternaam bestaat niet." & vbCrLf & vbCrLf
    Msg = Msg & "Wil je " & NewData & " toevoegen?"
    If MsgBox(Msg, vbQuestion + vbYesNo) = vbYes Then
        DoCmd.OpenForm "frm_medewerkersAannemers", , , , acAdd, acDialog, NewData
    End If
    Me.Achternaam.Requery
End Sub
Je doet weer hetzelfde, checken of de waarde bestaat en een Msgbox openen met de vraag of het record moet worden toegevoegd. Alleen open je nu een formulier (in acDialog modus om te voorkomen dat de gebruiker ondertussen wat anders gaat doen). Dat krijgt onderstaande code, waarin de OpenArgs variabele wordt uitgelezen en de getypte waarde in het juiste veld wordt gezet. Tenslotte had de gebruiker de naam al ingevoerd.

Op het formulier zie je dan deze gebeurtenis die de variabele uitleest:
Code:
Private Sub Form_Load()
    If Me.OpenArgs <> "" Then
        Me.Achternaam = Me.OpenArgs
    End If
End Sub
Als laatste actie zie je dat de keuzelijst opnieuw wordt bijgewerkt. Om dus de nieuwe waarde te laten zien. Je kan ook een DLookup gebruiken om hem gelijk te vullen met de toegevoegde naam.
 
Private Sub overige_lokatie_NotInList(NewData As String, Response As Integer)
If NewData = "" Then Exit Sub
msg = "'" & NewData & "' staat niet in de lijst." & vbCr & vbCr
msg = msg & "Wil je deze toevoegen?"

i = MsgBox(msg, vbQuestion + vbYesNo, "Onbekende naam . . ")
If i = vbYes Then
strSQL = "INSERT INTO overige_lokaties ([overige_lokaties]) VALUES ('" & NewData & "');"
CurrentDb.Execute strSQL, dbFailOnError
Response = acDataErrAdded
Else
Response = acDataErrContinue
End If
End Sub

Zal bovenstaande morgen eens goed lezen....du maaks mich nog gek :P
 
Laatst bewerkt:
bovenste code verwijs toch naar een tabel of naar query? tbl_merk en veld [merk]

Krijg foutopsporing CurrentDb.Execute strSQL, dbFailOnError ....kan de uitvoertabel niet vinden of zoiets maar de tabelnaam is overige lokaties en veld overige lokaties
 
Laatst bewerkt:
Mijn voorbeeldje is gebaseerd op 2 test db's die ik hier uit het forum heb geplukt. Dus de code moet je inderdaad wel aanpassen aan je eigen situatie.
Mag ik je er (volgens mij ook al eerder gedaan) nog eens op wijzen dat code opgemaakt moet worden met de CODE tags? We zien 'm graag leesbaar :). Zelf typ ik de codes er gewoon omheen, dus
[ code ] vóór de code begint, en [ /code ] achter de codetekst. Uiteraard zonder spaties. Kleine moeite, groot resultaat :D.
 
Code:
Private Sub overige_lokatie_NotInList(NewData As String, Response As Integer)
If NewData = "" Then Exit Sub
msg = "'" & NewData & "' staat niet in de lijst." & vbCr & vbCr
msg = msg & "Wil je deze toevoegen?"

i = MsgBox(msg, vbQuestion + vbYesNo, "Onbekende naam . . ")
If i = vbYes Then
strSQL = "INSERT INTO overige_lokaties ([overige_lokaties]) VALUES ('" & NewData & "');"
CurrentDb.Execute strSQL, dbFailOnError
Response = acDataErrAdded
Else
Response = acDataErrContinue
End If
End Sub
 
Code:
CurrentDb.Execute strSQL, dbFailOnError

daar klopt iets niet...wil je eens kijken naar de DB en me helpen om dit formulier goed te krijgen.
 
Laatst bewerkt:
Ik heb deze db niet, dus ik kan niet precies zeggen waar het fout gaat, maar ik zie wel iets raars in deze regel:
Code:
        strSQL = "INSERT INTO overige_lokaties ([overige_lokaties]) VALUES ('" & NewData & "');"
Je hebt een tabel overige_lokaties met daarin een veld [overige_lokaties] ?
 
klopt heb de zelfde naam gebruikt maar werkte niet. Nou als ik hem nog eens mag mailen naar live zou ik je heel dankbaar zijn daar de DB min of meer actief is op het werk :(
Als de DB een beetje draait wil ik helemaal opnieuw beginnen maar tot die tijd ..... trouwens vond alleen deel 1 van jou cursus
 
Alle afleveringen staan in de handleidingen sectie. Zeker als je filtert op Office, moet je ze tegenkomen. Maar stuur maar op, dan kijk ik er weer naar.
 
Bedankt heb de DB net verstuurd en nu ff zoeken naar jou cursus:o
 
Als je een willekeurige handleiding van de voorpagina aanklikt, en in het handleidingen scherm bij <Selecteer categorie> de optie <Office suite> selecteert, zie je 26 hoofdstukken bovenaan staan :).
 
de code werkte wel in een nieuw formulier wat ik gemaakt had...even om te testen :P
G?a nu eens kijken of het me lukt als twee velden bijgewerkt moeten worden bijvoorbeeld als de lokatie uit twee velden bestaat [straatnaam] en [gemeente]
Kan dat?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan