Uitrolvenster in nieuw record.

Status
Niet open voor verdere reacties.

Sytse1

Gebruiker
Lid geworden
9 aug 2007
Berichten
584
Office versie
miDer
Is het mogelijk om in het uitrolvenster bij de keuze voor een nieuw record direct het eerste record uit de onderliggende tabel/query van het uitrolvenster te tonen?
 
Als ik zou weten wat een ‘uitrolvenster’ is wellicht. Ik ken het begrip ‘uitrollen’ en ik weet wat vensters zijn. Maar dat je daar één woord van kon maken?
 
Sorry, list box of combo box
 
Dan is het tijd voor het volgende struikelblok: wat wil je precies? Je kunt in een tabel keuzelijsten maken, maar die kun je niet aan het eerste record uit die tabel hangen. Een keuzelijst in een tabel is sowieso een heel slecht idee. Ik krijg het idee dat je de gegevens uit het eerste record wilt invullen als je een nieuw record aanmaakt. Dat is overigens wat anders dan ‘het eerste record uit de onderliggende tabel/query tonen’. Dus wat is de bedoeling?
 
Bij een bedrijf met meerdere vestigingen wordt centraal de medewerkers in een bestand geregistreerd.
Bij de registratie van een nieuwe medewerker wordt eerst via een listbox de vestiging ingevuld.
Voor sommige vestigingen werken veel medewerkers. Er kan dan ook bij de tabel van de vestigingen de sortering van de tabel aangegeven worden. Deze vestiging staat dan boven in de lijst.
Mijn vraag is of het mogelijk is om bij de keuze voor een nieuwe medewerker de keuze direct in de listbox getoond kan worden. Zonder dat er een keuze gemaakt hoeft te worden.
Ik.heb dit middels vba geprobeerd echter zonder resultaat. B.v. Door de voorkeursvestiging bij de keuze voor een nieuw record direct in de listbox te plaatsen.
Er moet altijd een keuze via de listbox gemaakt worden.
Hopenlijk voldoet deze uitleg.
 
Ik veronderstel dat dit een tamelijk uitgebreid systeem is (met misschien één Backend en verschillende Frontends per gebruiker) en dat de gebruiker moet inloggen? Gewoon bij het inloggen een functie voegen die een tempvars maakt van het nummer/Id van de vestiging en van de gebruiker zijn werknemerID. Die tempvars kunt je dan overal aanroepen in je DB en bv in keuzelijsten als standaard instellen zodat je telkenmale niets moet selecteren of aanklikken of als standaard gebruiken in een nieuwe record in een tabel (je moet die dan wel benaderen via een formulier omdat je de tempvars niet rechtstreeks als standaard kunt gebruiken in een tabel).
 
Laatst bewerkt:
Dank je wel voor de tip. Maar de administratie van de verschillende vestigingen wordt centraal gedaan. Zeg maar bij de holding.
Deze medewerker kan dan een vink zetten bij de vestiging waar verschillende nieuwe medewerkers voor die vestiging ingevuld moeten worden.
Omdat dan de vestiging al ingevuld staat hoeft er geen keuze gemaakt te worden, maar er sluipt soms een medewerker tussen de stapel die dan toch bij een andere vestiging hoort en dan moet er een andere keuze gemaakt worden. Door de knop nieuwe medewerker wordt de geselecteerde vestiging weer getoond. Veel tekst voor een gebruikersgemak item. Bij gebruik van de knop nieuwe medewerker wil ik dan ook direct de geselecteerde vestiging in de listbox getoond zien. Ik weet niet of het mogelijk is om direct tekst in een listbox te tonen. Mij is het nog niet gelukt.
 
Laatst bewerkt:
Een keuzelijst is wat lastiger dan een keuzelijst met invoervak, maar nog wel te doen. Ik zou overigens geen keuzelijst gebruiken, maar een keuzelijst met invoervak. En ik zou het hele gedoe vervangen door een truc waarbij je de DefaultValue van de combobox steeds koppelt aan de laatst ingevoerde waarde. Dan ben je relatief snel en makkelijk klaar. De eerste keer dat je een medewerker invoert stel je de Default in op de vestiging van die werknemer. Dan krijgt elke volgende nieuwe automatisch die vestiging. Wil je een keer tussendoor een andere, dan kies je die uit de lijst. Dan verander je weliswaar ook de default (komt dan op die andere vestiging te staan) maar bij de volgende persoon zet je hem dan weer op de volgende vestiging die dan weer Default wordt.
Met een beetje slim invoeren (alles wat bij elkaar hoort achter elkaar doen) heb je er nauwelijks omkijken naar.
 
Beste Octafish,
Bedankt voor je reactie en uitleg.
Ik ga het aanpassen.
Sytse
 
Ik gebruik zelf de gebeurtenis <Bij Aanwijzen> voor deze handeling, al kan je hem ook op de <AfterUpdate> van de keuzelijst hangen. Je krijgt dan iets als:
Code:
     Me.Combobox1.DefaultValue = Me.Combobox1.Value
Moet je maar eens mee stoeien.
 
Voordeel van tempvars is dat je het door je hele DB mee kunt nemen (en dus niet bij ieder ander formulier dat je gebruikt de defaultwaarde van je keuzelijst opnieuw moet instellen) en verder hoef je die ook niet meer te tonen in een keuzelijst als je die niet moet veranderen, je weet gewoon dat ze in orde is en blijft.
 
Johan, je weet wellicht veel van TempVars.
Ik probeer op de volgende wijze het veld tst in formulier F_1 bij het laden te vullen.
Code:
Dim VarVest As TempVars
 TempVars!VarVest = "Vestiging"
 Forms!F_1!Tst = VarVest
Maar het resultaat is VarVest = Nothing zodat het veld niet gevuld wordt met Vestiging
 
Ga eens in het woord TempVars staan en druk op F1. Dan zal je zien dat je het principe verkeerd gebruikt. Aangezien je specifiek van JohanRVT antwoord wil, hou ik me er verder even buiten :).
 
Beste OctaFish,
Ik vroeg dit aan Johan omdat hij over TempVars begint.
Jou antwoord had ik al gebruikt maar ik was ook nieuwsgierig om te kijken hoe dit met TempVars werkt.
Ook gegoogeld maar daar de juiste syntax niet gevonden.
Sytse
 
Tempvars voorbeelden en zo meer info als je bv googled en via https://docs.microsoft.com/en-us/office/vba/api/access.tempvars
Maar ik denk uit je voorbeeld dat je toch eens goed moet nalezen dat je ergens in je DB op een bepaald moment eerst de waarde Varvest moet in het geheugen laden van je PC als een Tempvars door het "add" commando en pas dan kan je die waarde uitlezen.
Ik zou dus die vestiging inladen bij het inloggen in uw database (kan daar bv gebeuren in keuzelijst, of een Dlookup), toevoegen via het tempvars.add commando aan de collectie en dan uitlezen in uw formulier.
Tip: Ik gebruik voor het aanmaken van die tempvars waarden meestal de gewone naam van het veld met daarvoor nog eens een paar letters (die mag je zelf kiezen), kwestie van duidelijk onderscheid te maken over welke waarde het gaat (jij koos voor VAR) en ik zet de meeste gebruikte tempvars zaken in een apart Txt bestandje zodat ik die maar te kopïeren en te plakken heb in mijn VBA codes. Ik gebruik ook steeds Option Explicit in de VBA code maar de Tempvars zelf moet je niet declareren.
Voorbeeldje voor U als je bv een keuzelijst zou gebruiken bij het inloggen in je DB om je vestiging te kiezen dan zet je in de afterupdate iets in de zin van
Code:
TempVars.add "VarVest", Me.KzlVestiging.Value
Staat je ID van de vestiging in kolom twee van de keuzelijst gebruik dan
Code:
TempVars.add "VarVest", Me.KzlVestiging.Column(1).Value

Je verschillende vestigingen zijn waarschijnlijk wel ergens opgeslagen in een tabel denk ik en je standaard vestiging vink je dan waarschijnlijk ook wel ergens aan? Ik zeg dat maar omdat je dan bv in je inlogscherm bij het openen ervan de vesting kunt inladen via een DLookup en je niet steeds de keuzelijst moet gebruiken. Dat doe je dan bv zo
Code:
Dim currInst As Integer
'Vestigingsnummer opzoeken voor de vestiging
    currInst = Nz(DLookup("Vestiging", "Tbl_Vestigingen", "IHuidig=True"), "")
    TempVars.add "VarVest", currInst
'of dezelfde code in één regel
' TempVars.add "VarVest", Nz(DLookup("Vestiging", "Tbl_Vestigingen", "IHuidig=True"), "")

Voor het uitlezen van die Varvest in je formulier doe je dat dan gewoon zo in je VBA code bij openen
Code:
Me.tst = [TempVars]![Varvest ]

Bestaande Temvars waarden worden overschreven als je er een nieuwe waarde aan toekent, je kunt die dus heel vlot laten veranderen.
Je kunt tot 255 van die waarden tegelijk in je geheugen laden en ze worden verwijderd als je de DB sluit, maar je hebt ook het remove commando daar voor. Maar dat lees je wel na op internet.
 
Johan geweldig bedankt voor je uitleg.
Helder en duidelijk.
De vestigingen staan inderdaad in een tabel met 1 selectie.
Dit beschrijf je in je uitleg.
Ik zie waar ik al in de fout was gegaan.
Weer wat geleerd.
Sytse
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan