• 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.

Zoeken in Database d.m.v. Formulier.

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

Magik

Gebruiker
Lid geworden
18 jan 2020
Berichten
49
Eigenlijk ben ik best tevreden met wat ik tot nu toe met het formulier bereikt heb.
Toch heb ik nog 4 aandachtspunten.
De eerste:
Ik wil dus zoeken in de Database naar woorden die in het formulier bij "Zoek Object" worden getypt.
Deze woorden staan echt over alle kolommen en regels verspreid in de Database.
Nu vond ik ergens op het Internet een VBA code die bijna deed wat ik wilde, enige verschil was dat deze code maar in 1 kolom keek.
Wat er wel mooi aan was is dat er een autoaanvulling bij zat.
Ik heb de VBA code ingebouwd maar waar ik al bang voor was, hij loopt vast op de kolom.
Overigens heb ik wel het idee dat hij zou kunnen werken.

Het 2e punt is eigenlijk ook een soort van zoeken in de Database.
Ik wil dat er bij het volgnummer automatisch een nummer gegenereerd word.
Hoe en op welke manier daar ben ik nog niet over uit.
Aangezien in iedere Documentnaam ook een datum staat zal het Volgnr alleen oplopen bij dubbele exemplaren.
Door middel van de Pulldown menu's en de datum word de rest van de Documentnaam gevormd.
Ik heb hier mee bereikt dat ik ieder poststuk binnen een paar tellen terug gevonden heb, zowel in mijn lijst als in de kast.
En daarmee tip ik eigenlijk ook gelijk de laatste textbox Object Nr aan en deze maakt het denk ik complex.
Ieder Pulldowwn menu bevat trefwoorden waarvan ik ook een lijst met afkortingen heb.
Ik vul dus bv bij land/Country Nederland/Netherlands in en dit wou dus de ISO code NLD moeten krijgen.
We hebben er hier weinig aan maar via een formule "=ALS(ISLEEG(B4);(" ");(VERT.ZOEKEN(B4;S3:T475;2;)))" werd dan de naam
Netherlands omgezet naar NLD.
Dit zijn de eerste 3 letters van het Documentnaam, voor de overige pulldown menu's geldt het zelfde principe.

Op dit moment heb ik nog geen enkel idee hoe ik dit zou moeten opzetten in het formulier.
Is er iemand die een idee heeft hoe ik dit zou kunnen benaderen?

Het komt ook regelmatig voor dat ik wat weg doe, het filteren van deze waardes is eenvoudig te regelen met een voorwaardelijke opmaak.
Ik gooi ze niet weg maar bewaar de data waardoor ik nog leuke vergelijkingen kan maken.
Ik verberg deze dus.
Maar ik vraag me af waarom deze wel in het formulier verschijnen, zou dit ook weg te filteren zijn?

Gr Dick
 

Bijlagen

Waarom zet je alle vaste gegevens niet gewoon in een apart (verborgen) blad? Waarom gebruik je aparte modules voor code die toch maar op 1 formulier van toepassing zijn? Allemaal zeer omslachtig en lastig te onderhouden. Voor het leegmaken van objecten kan je beter een lusje gebruiken ipv elk object te benoemen en dan leeg te maken. Maak gebruik van een array om de gegevens in te laden en gebruik .list ipv rowsource. Als je dat op orde hebt dan maakt er vast wel even iemand hier de zoekroutine die je overigens ook in verschillenden voorbeelden op dit forum kan vinden.
Nog een tip. Maak van jouw 'database' een echte tabel.
 
Laatst bewerkt:
Hoi VenA,

Ik heb je bericht een paar keer moeten lezen, je loopt met woorden te gooien die ik wel eerder gelezen heb maar waarvan ik de werkwijze nog niet echt onder de knie heb.
Ook ging je wel heel snel, wil daarom vragen om het nog eens rustig te doen.

1. jij hebt het over: Waarom zet je alle vaste gegevens niet gewoon in een apart (verborgen) blad? Waarom gebruik je aparte modules voor code die toch maar op 1 formulier van toepassing zijn? Allemaal zeer omslachtig en lastig te onderhouden.

Wat bedoel je hier nu pressies mee? zijn dit bv die waarden die in de pulldown menu's staan?
Dat hele lange verhaal met landsnamen e.d.?
Ik ben het met je eens dat dit geen schoonheidsprijs verdient en mochten dit idd gegevens zijn die op een vast blad zouden moeten staan dan moet ik bekennen dat ik die wel heb.
Enkel kon ik nergens een voorbeeld vinden van hoe ik deze gegevens naar en van het formulier kon krijgen.
En natuurlijk wil ik straks iets hebben wat eenvoudig te onderhouden is en voor een vast (verborgen)blad sta ik zeker open.

2. Lusje (deleten) Yup mee eens.

3. Ik begrijp wat rowsource doet en hoe dit werkt, ook hoe ik het kan be-invloeden.
Ik heb array vaak zat zien staan maar weet niet hoe het werkt, zal eens kijken of ik dit ook kan begrijpen door me er eens in te verdiepen.
Het is namelijk best vaak moeilijk om te begrijpen wat ze bedoelen en zie daarom ook graag voorbeelden.

4. Tabel, jij zegt niet maak er een tabel van als ik daar later wijzigingen in moet aanbrengen omdat er een 100 tal nieuwe objecten bijgekomen zijn.
Maar..
Niet dat ik nu ga vragen of jij dit werkende kan krijgen want ik vind het veel te leuk om daar zelf veel in te doen.
Maar gaat een formulier met een layout als deze werken op die database?
Als jij ja zegt wat tips hebt waar ik zou moeten gaan lezen dan ga ik het proberen.
(wel de hoop dat je me af en toe kan uitleggen waarom iets juist op die manier gedaan word)

Gr Dick
 
In mijn optiek ben je met een veel te groot project begonnen zonder dat je de basis onder de knie hebt. Dat is natuurlijk niet erg maar maakt het voor de helpers wel lastig om te doorgronden waar wat staat en hoe het op een snelle manier te vereenvoudigen is.
Waarom heb je bijvoorbeeld lege klommen in jouw database? Dat maak het wegschrijven van gegevens mogelijk lastiger. Staan daar formules in of komen deze erin te staan en mogen ze niet overschreven worden?

Code:
Me.txtRownumber.Value = Selected_list + 1
 Me.txtObjectnr.Value = Me.lstDatabase.List(Me.lstDatabase.ListIndex, 0)
 Me.txtVlgnr.Value = Me.lstDatabase.List(Me.lstDatabase.ListIndex, 1)
 Me.txtContigent.Value = Me.lstDatabase.List(Me.lstDatabase.ListIndex, 4)
 Me.txtOpgeborgen.Value = Me.lstDatabase.List(Me.lstDatabase.ListIndex, 5)

En dit soort code is, los van de lege kolommen, ook niet echt efficiënt.

Om op jouw oorspronkelijke vraag terug te komen. Alle kolommen in een rij samenvoegen tot 1 string en dan met instr kijken of de waarde in de string voorkomt.

In het bestandje even alle ballast weggelaten. De comoboboxen worden gevuld op basis van de waarden in de tab 'Vaste_gegevens' De Listbox wordt gevuld vanuit de tabel in de tab 'Database'. In zoekobject kan je de listbox filteren.

Bekijk het maar eens.
 

Bijlagen

Oke dan,

Ik ga dit eens nakijken.
Wel zie ik iets in de vaste gegevens ontstaan wat ik deels herken uit mijn oude vaste gegevens blad.
Dat zoeken is top.

Ik heb overigens vanavond de originele lijst aangepast, alle kolommen die ik echt niet gebruikte zijn uit de Database verwijderd.
Ik wil namelijk in het deel wat door het formulier bedient gaat worden geen enkele formule hebben staan.
Buiten dit bereik wil ik wel iets maken waarmee ik een cel activeer waardoor ik met een macro de regel kan verbergen.
Ik weet dat ik nog niet alle data van de brieven verwerkt heb, het aantal kolommen is gebaseerd op een brief waar daadwerkelijk 12 verschillende zegels op zitten.
Hier kom ik dus niet onderuit en dat deze cellen in het formulier niet gevuld worden is niet erg, dat gebeurde op de oude manier ook niet.
Dit houd niet in dat de kolommen die nu nog leeg zijn ook in de Database moeten blijven staan, aangezien het blad nu als Tabel is ingericht zouden de kolommen
ook aangevuld kunnen worden op het moment dat ze ook nodig zijn.
Als eerste maar eens deze basis bekijken en de nieuwe opzet van de Database er in verwerken,
Ook zal ik de vaste gegevens aan gaan vullen met de andere vaste gegevens.

In mijn optiek ben je met een veel te groot project begonnen zonder dat je de basis onder de knie hebt.

Ja sorry, het begon met een lijstje wat een hele tijd met wat formules bij te houden was.
Had ook tot eind April kunnen wachten maar ben beetje ongeduldig.
14 April Start Cursus Computrain.
Of zou ik het zo leuk vinden?

Gr Dick
 
Zo'n training is op zich niks mis mee, maar ik denk dat je meer leert van gerichte vragen hier en de reacties erop van een aantal doorgewinterde VBA kenners hier.
Met gerichte vragen bedoel ik dan, wees erg precies in wat je zou willen en plaats er voorbeelden van in een Excel document.

Mijn ervaringen met dat soort trainingen is dat het nogal basis is en stel vooral geen specifieke gerichte vragen want degene die de training geeft zal daar geen antwoord op hebben.
Ik heb er geen hoge dunk van.
 
Laatst bewerkt:
Ik geloof ook niet dat ik dan vlekkeloos VBA schrijf en daar gaat het mij niet om.
Ik wil weten hoe ik dingen moet benoemen zodat ik in de juiste richting kan gaan zoeken en gericht kan vragen.
Op dat moment snap ik ook waar het over gaat, of ik dan de oplossing snap?? das de ervaring.
Zoals ik eerder heb gehoord, je kan je rijbewijs wel halen maar in de jaren erna leer je pas rijden.

Op dit moment is mijn voorkennis:
Niet iedere manier is geschikt om meer dan 30 kolommen te lezen vanuit een database.
Dat wat VenA niet schreef maar mij wel liet zien, Mijn document kan werken maar is zoveel trager dan dit met Array te doen.( Klopt toch? )

Wat heb ik hiervan geleerd? : Verzamel eerst je gegevens die je hebt en voeg deze zoveel mogelijk bij elkaar. (Had ik gedaan)
Hierdoor zie je hoeveel het is. (Wist ik )
Weet ook wat je wilt, schrijf op en teken eventueel je voorbeelden. (Had ik gedaan)
Stel de vraag hoe dit te benaderen of verdiep je de werkwijze van de code's. (Niet gedaan)

Wat is mij nu opgevallen: Ik heb simpel 2 weken een uur of 2 per avond aan mijn document zitten prutsen en ben nog steeds bij af. :D

Vragen:

VenA Ik zie dat je bij de vaste gegevens de 5 kolommen gevuld heb met de vaste waardes uit de Pulldown menu's.
Het lijkt mij dat de kolommen alfabetisch staan of heeft dit nog een rede?
In de programma code van het formulier zie ik hoe je het blad aanspreekt, ook zie ik de loops waar je het over had.
Interessant en ga ik zeker uitzoeken.
Daarna kom je bij het vullen van de Pulldown menu's, ListObjects(1) tm (5), dit zijn die eerste 5 kolommen van de vaste gegevens.
Nu mijn vraag:
Op dit moment heb ik voor iedere kolom die jij hier beschrijft in mijn originele document een afkorting staan.
Stel dat ik die gegevens op het vaste blad er ook voor zou zetten en ListObjects 2 4 6 8 en 10 zou gebruiken.
Ik zou denken dat dit ook moet kunnen werken maar weet niet of dat slim is.
Ik kan namelijk een aantal kolommen verderop ook die 5 kolommen neer zetten met de afkorting er voor.
Van die eerste 5 kolommen heb je toch tabels gemaakt dus dat zou geen invloed mogen hebben.
Overigens zou ik de hele handel ook achter kolom AA kunnen zetten en de vaste waardes uit de eerste 5 kolommen met een formule naar de cellen achter AA laten kijken.
Dit heb ik al getest en werkt gewoon.
Wat zou jou advies bij deze zijn?

Gr Dick
 
In de tab Vaste_gegevens staan 5 verschillende tabellen. Deze zijn via de name manager te zien als Table1 t/ Table5. Door de volgorde waarin ik deze tabellen heb aangemaakt zijn het 'toevallig' ook Listobjects(1) t/m Listobjects(5 )geworden. Als er meerdere tabellen in 1 werkblad staan dan kan je deze beter een logische naam geven. En deze naam gebruiken in de code. Dus van table1 maak je bijvoorbeeld Tbl_country (gebruik geen Table1. In de Nederlandse versie zal er waarschijnlijk Tabel1 van gemaakt worden)
Voor het vullen van de combobox wordt het dan
Code:
cmbCountry.List = [TBl_Country].Value
Waar je de tabellen neerzet maakt niet uit omdat er naar een bereik verwezen wordt.

De gegevens heb ik niet gesorteerd maar overgenomen zoals jij ze in de code had staan. Het voordeel van losse tabellen is dat je dmv een extra kolom kan sorteren op favoriete items. (al is het intypen van de eerste paar letters natuurlijk ook niet zo heel veel werk)
 
Hoi,

Duidelijke en goede uitleg, Bedankt.
Door op deze manier te werken maak je er eigenlijk een soort blokje data van die overal in het blad geplaatst mag worden.
De koppeling cmbCountry.List = [TBl_Country].Value zorgt voor een harde verbinding met een blokje met die naam en niet met de cellen.
Ik heb dus gelijk de kolom namen gebruikt voor de tabellen, vooraf gegaan van de letters Tbl_.
Uiteraard ook de Database.

Maar aangezien de Database op dit moment 1 tabel is neem ik aan dat deze werkwijze niet toepasbaar is op de overige tekstboxen.
Voor die tekstboxen zou een vergelijkbare formule als txtDate.List = .ListObjects(....).DataBodyRange.Value (je voorbeeld in het formulier)
Op de plaats van de puntjes het kolomnummer.
Klopt dat ongeveer?

Wat de knoppen betreft en de achterliggende macro's, zijn dit altijd Private Sub's of zou je dat in dit geval ook anders aanpakken?

Overigens werkt dat zoeken zo echt fantastisch, in eerste instantie dacht ik aan auto-aanvullen in de tekstbox maar die mis ik geeneens.
Enige wat ik wel ga uitzoeken is of de kolomnamen in de lijst zichtbaar gemaakt kunnen worden.
De meeste kolommen ken ik ook wel maar voor de juiste kolom bij de zegels is het kolomnaam wel handig.


PS Dit heeft eigenlijk niets meer met het zoeken te maken.

Ook denk ik door dat er nu een blad met vaste gegevens is dat het een stuk eenvoudiger is om de documentnamen te genereren.
Door met een tabel te werken is het ook eenvoudiger om de afkorting van bv nederland of de andere gegevens op te halen.
Via VBA zijn deze gegevens dan weer samen te voegen waardoor enkel het volgnummer nog gemaakt zou moeten worden.
Enige wat ik hierin nog niet gelezen heb is, kun je een tekstbox in een formulier ook uitlezen en op een andere plek in dit geval het object Nr ook laten zien?
 
Neem deze vragen/opmerkingen mee naar de training. Om alles te gaan uitleggen gaat mij een beetje te ver.
Lees ook nog eens de tweede zin in #6. Hele lappen tekst schrikt de meesten af.

Zoeken in Database d.m.v. Formulier.
Lijkt mij opgelost.;)
 
Laatst bewerkt:
Ik had het bericht gestuurd en dacht dit is groot deels off topic.

Zal proberen gerichter te worden.

Zoeken is opgelost
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan