Velden automatisch invullen

  • Onderwerp starter Onderwerp starter Johgs
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

Johgs

Gebruiker
Lid geworden
19 mei 2011
Berichten
340
Ik heb een (doorlopend) formulier waarop een aantal velden ingevuld moeten worden die in één tabel worden opgeslagen. Op dit formulier zijn meerdere regels in te voeren, iedere regel uiteraard een record.
Een aantal velden worden automatisch ingevuld via standaard waarde waarbij gegevens worden overgenomen van het formulier van waaruit het is geopend.
Een aantal velden moeten nog handmatig ingevuld worden, een aantal via keuzelijsten met als bron enkele query's die lopen op basis van de "standaardgegevens". Een aantal velden hebben vrije invoer.
Dit werkt probleemloos. Er is echter één nadeel, als het veld met een omschrijving (gekozen uit een querylijstje) iets wordt aangepast (bijv.spelfout correctie) kan dat veld niet meer gebruikt worden om een rapport te genereren geselecteerd op die omschrijving, records voor de spellingscorrectie worden dan niet getoond.
Daarom heb ik de tabel voor de query die de omschrijvingen voor de keuze lijst uitgebreid met een aantal velden o.a. een volgnummer. Hiermee wil ik het rapport dan laten selecteren op bijv. het volgnummer om zo een overzicht te krijgen met alle omschrijvingen voor en na de wijziging.

Probleem is nu dat op het formulier die nieuwe velden automatisch moeten worden ingevuld (oude gegevens zijn nog bij te werken, daar zit het probleem niet).

Hoe krijg ik die extra velden automatisch gevuld bij nieuwe invoer? Heb al zitten experimenteren maar a.d.h.v. de help functie "automatisch invullen", maar krijg het niet werkend.
De extra gegevens die automatisch ingevuld worden hoeven niet zichtbaar te zijn, maar als of volgnummer of keuze uit lijst omschrijvingen mogelijk is, is dat ook welkom.

Probleem is dus niet alleen dat ene veld uit die query ingevoerd te krijgen, maar ook een aantal bijbehorende data uit dezelfde query, eigenlijk dus net zoals postcode invoeren en overige NAW automatisch ingevoerd.
 
Ik snap niet wat je bedoelt. En dan wordt een antwoord wel erg lastig. Kun je er niet een voorbeeldje bij doen?
 
Had al gereageerd maar kennelijk een klikje te weinig gegeven.

Ik gebruik een doorlopend formulier voor het invoeren van gegevens in één tabel. Een aantal velden worden standaard ingevuld door kopiëren vanuit het formulier van waaruit het invoerformulier wordt geopend, zoals afdelings naam. Een aantal velden zoals datum en tijd zijn vrij in te vullen en een aantal velden worden via keuzelijsten ingevuld waarbij de keuze lijsten query's zijn die de voor de afdeling relevante mogelijkheden geeft.
Eén van die keuzevelden geeft keuze uit diverse teksten. Nu wil ik dat als een tekst wordt gekozen enkele andere velden worden ingevuld met gegevens uit diezelfde query zoals bijv. het volgnummer van die tekst of op welke sublijst die tekst thuishoort. vergelijk het met invoeren van een postcode en huisnummer en het automatisch toevoegen van straatnaam en woonplaats.

Het lukt wel met, schrik niet, een macro en een extra query die op basis van de gekozen tekst opzoekt welke data er bij hoort en dan kopieer/plakwerk, maar da's niet zoals het hoort (en geeft probleem met kopiëren als een veld leeg is).

Helemaal mooi zou zijn als of volgnummer ingevoerd kan worden en tekst automatisch ingevuld wordt of tekst ingevoerd (via keuzelijst) en nummer wordt toegevoegd.

Er wordt dus een veld ingevuld via keuzelijst, vervolgens loopt er een query die op basis van de ingevoerde waarde bijbehorende data opzoekt en dat moet vervolgens ingevoerd worden in het record.

Ik zal straks thuis de Noordenwind eens laten blazen, zit vast een voorbeeld in van wat ik wil. Wellicht dat ik er dan uit kom.
 
Tekstvelden automatisch vullen vanuit een keuzelijst is heel simpel: gebruik een verwijzing naar de kolom van de keuzelijst (-1). Als je de 3e kolom uit de keuzelijst cboTekst wilt hebben, dan zet je in de besturingselementbron van het tekstveld de formule:
Code:
=cboTekst.Column(2)
En zo loop je alle tekstvelden na. Je moet dus de velden die je wilt vullen wel in de keuzelijst hebben zitten, anders werkt het niet.
 
Ah, dat is een handige. Werkt het ook met een numeriek veld? Dat veld is voor het sorteren op volgorde en dat gaat alleen goed op numeriek, met tekst moet er een voorloop 0 bij, anders gaat het niet goed. (Eén van de redenen voor de verandering, nu beginnen de teksten om 01. blabla 02. blabla 03. enz enz.) Bron voor de digitale invoer zijn papieren lijsten met dezelfde nummering. Eén van de velden kan overigens leeg zijn, is dat een probleem?
Bedenk me overigens dat de keuzelijst geen getypte tekst is maar samengesteld wordt door een query, heb de indruk dat jouw methode alleen met vaste lijsten werkt, of....?

Overigens het probleem met de query's ook opgelost. Het lukte maar niet er een bijwerkquery van te maken, vond nergens de optie terug, bleek het icoontje ervoor uit mijn werkbalk te zijn verdwenen en als je je dan alleen herinnert dat het ergens MOET staan....... :o
Die bijwerkquery werkt prima bij handmatig starten en na invullen en verlaten (via macrootje dat de query start/opnieuw start). Probleem is alleen dat het niet in elke situatie werkt, wel bij invoer en verlaten, maar bij wijziging moet je veld uit, weer terug en weer eruit, welke optie(s) ik ook gebruik, bij verlaten, wijzigen, verlies focus enz enz.
Is vast een expressie voor die betrouwbaarder werkt. Suggestie?
 
Ik lees en ik lees, maar ik snap maar steeds niet wat je bedoelt. De property Column(#) werkt altijd, of er nu een datum, tekst of getal moet worden opgehaald uit de keuzelijst. Maar waar gaat dat sorteren verhaal over? Geen idee... En de methode werkt altijd, of je nu een Lijst met waarden gebruikt of een tabel. Zolang er maar meerdere kolommen in de keuzelijst zitten waar uit te kiezen is. En de optie Bijwerkquery zou altijd in de werkbalk moeten zitten, volgens mij kun je die niet eens verwijderen :).
 
De tabel waaruit de query zijn data haalt bevat ook tekstvelden met de vragen voor inspectielijsten, die vragen zijn genummerd en moeten netjes op volgorde op de papieren lijsten, ook als er vragen worden gewijzigd. Eerst had ik nummers in de tekst, nu worden ze apart toegevoeg. Nu kan een vraag geselecteerd worden voor een rapport met bijv. Hoe vaak er op die vraag omissies waren, ook als tussentijds de tekst iets wijzigt. Omdat de tabel vragen bevat voor een tiental verschillende lijsten wordt nu Id gebruikt voor selectie en een via query toegevoegd volgnummer voor sorteren.
Die bijwerkquery heb ik toch echt zelf weer moeten toevoegen.
In Access zitten opties om bepaalde functies uit te schakelen of opties van werkbalken aan te passen.
Zo ontdekte is recent dat een nieuwe collega mmet een nieuw account ineens VBA geheel uigeschakeld heeft staan zonder mogelijkheid het zelf aan te zetten.
 
Ik zit in een nieuw formulier te stoeien met o.a. hoger vermelde cbotekst.column methode maar....

Het formulier bevat per record een 7 tal gegevens. Eerste veld is een keuze veld met per rij 7 gegevens.
In veld 1 wordt vanuit de keuzelijst een waarde ingevuld worden (eerste kolom) en bij de overige 6 moeten dan standaardwaarden vanuit dezelfde rij van het keuzeveld worden ingevuld. Deze overige velden moeten nog aangepast kunnen worden en vervolgens in een record worden opgeslagen.
 
Dat riekt als slechte normalisatie, maar afgezien daarvan: mag geen probleem zijn. De formule hierboven (cboKeuzelijst.Column(#)) werkt op basis van een goede normalisatie. En daarbij kies je uit een tabel een waarde (bijvoorbeeld een artikelID) en laat je de overige artikelgegevens zoals naam, categorie en prijs zien op je bestelformulier. Het heeft daarbij geen enkele zin om de waarden uit de keuzelijst nog een keer op te slaan, behalve de prijs wellicht want die is dynamisch.
Zodra een veld is gekoppeld aan een tabelveld, kun je hem niet vullen vanuit de Column(#) optie. Is logisch, een object heeft maar één besturingselementbron. En als dat een tabelveld is, dan moet dat zo blijven. Wél kun je vanuit de keuzelijst die velden vullen, maar dat moet je dan met VBA doen. Bijvoorbeeld via de <Bij klikken> gebeurtenis. Ook dan gebruik je de eigenschap Column(#) omdat daar immers de data in staat.
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan