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

zoekfunctie

Status
Niet open voor verdere reacties.

marloes72

Gebruiker
Lid geworden
23 apr 2007
Berichten
333
Ik heb een userform gemaakt voor beheren van een kerkbijdrage database in excel. Dat is beste een projectje als je niet zoveel ervaring hebt met vba. Ik geloof dat het aardig gelukt is. Maar met de zoekfunctie ben ik niet blij. Ik wil graag dat je op de achternaam (of een deel daarvan!) kunt zoeken, ongeacht gebruik van hoofdletters e.d. En dat daarna het eerste gevonden record laadt in de velden van het userform. Eventueel kan ik daarna nog verder zoeken of terug zoeken toevoegen. Maar het lijkt me handig wanneer dan het eerste deel werkt :). Ik krijg nu alleen maar steeds "Niet gevonden" als ik zoek naar een naam die er, zeker weten, wèl in staat!

Met de normale zoekfunctie moet je exact intypen wat er in de cel staat, anders wordt het record niet gevonden. Die bleek dus niet geschikt. Dus heb ik nu de find functie geprobeerd erin te zetten. Maar die werkt voor geen meter. Ik heb het vast verkeerd gedaan. Hopelijk weet iemand wat er fout is en/of hoe ik wèl een goede (deelwaarde) zoekfunctie kan maken.

Code:
Private Sub CMBzoeken01_Click()

Dim zoeken As String
zoeken = TBXzoeken01.Value

currentrow = 4

If zoeken = "" Then
        MsgBox "zoekveld is leeg"
        Exit Sub
    End If
    
If zoeken <> "" Then
    With Sheets("gegevens")
     rij = .range("C:C" & .range("C" & Rows.Count).End(xlUp).Row).Find(What:=zoeken, _
            LookIn:=xlValues, _
            LookAt:=xlPart, _
            SearchOrder:=xlByRows, _
            SearchDirection:=xlNext, _
            MatchCase:=False).Row
        If rij = 0 Then
            MsgBox "achternaam niet gevonden"
        Else
            .range("C:C" & .range("C" & Rows.Count).End(xlUp).Row).Find(What:=zoeken, _
            LookIn:=xlValues, _
            LookAt:=xlPart, _
            SearchOrder:=xlByRows, _
            SearchDirection:=xlNext, _
            MatchCase:=False).Select
        End If
    End With
End If

End Sub
 
Laatst bewerkt:
Maak er eens dit van:
Code:
[COLOR="#FF0000"]Set rng = [/COLOR]Sheets("gegevens").range("C:C").Cells.Find(What:=zoeken, _
                                LookIn:=xlValues, _
                                LookAt:=xlPart, _
                                SearchOrder:=xlByRows, _
                                SearchDirection:=xlNext, _
                                MatchCase:=False).Activate

Of plaats je document.

Wat de zoekstring betreft mag je ook met jokertekens als * en ? werken.
 
Laatst bewerkt:
Ik was ondertussen nog bezig en ben inmiddels tot een ander code gekomen. Ik heb m hierboven vervangen. Ik krijg nu alleen een foutmelding bij dit stukje van de code:
Code:
rij = .range("C:C" & .range("C" & Rows.Count).End(xlUp).Row).Find(What:=zoeken, _
            LookIn:=xlValues, _
            LookAt:=xlPart, _
            SearchOrder:=xlByRows, _
            SearchDirection:=xlNext, _
            MatchCase:=False).Row
 
Laatst bewerkt:
Plaats het bestand. Het is totaal onnodig om in een werkblad te gaan zoeken als je de gegevens al in een combobox kan hebben staan.
 
Wat de zoekstring betreft mag je ook met jokertekens als * en ? werken.
Dat weet ik, maar voor degenen die ermee moeten gaan werken is dat geen optie. Ik wil het graag zo makkelijk mogelijk voor hen maken. Al is dat voor mij dan dus weer niét makkelijk:confused:.

Het is totaal onnodig om in een werkblad te gaan zoeken als je de gegevens al in een combobox kan hebben staan.
Die relatie snap ik niet helemaal. Ik wil zoeken op achternaam en dat zijn geen gegevens die in een combobox staan.

Plaats het bestand
Dat ga ik proberen, maar moet even nadenken hoe. Het is namelijk een bestand met ontzettend veel informatie per rij en dat is bovendien privacy gevoelige informatie.
 
Dat weet ik, maar voor degenen die ermee moeten gaan werken is dat geen optie. Ik wil het graag zo makkelijk mogelijk voor hen maken. Al is dat voor mij dan dus weer niét makkelijk:confused:.

Dat hoeft de gebruiker ook niet te doen.
Die kan je zo in je vba code meegeven, bijvoorbeeld een * aan het begin en aan het einde van de zoekstring.
 
Als je de gegevens in een werkblad het staan dan kan je deze ook inladen in in combobox. En hoef je niets meer te zoeken in het werkblad. Wat er moeilijk is aan het plaatsen van een voorbeeld bestand ontgaat mij altijd.
 

Bijlagen

  • Moeilijk.xlsb
    20,8 KB · Weergaven: 66
Die kan je zo in je vba code meegeven, bijvoorbeeld een * aan het begin en aan het einde van de zoekstring.
Op de een of andere manier krijg ik dat dus niet werkend :(.

Als je de gegevens in een werkblad het staan dan kan je deze ook inladen in in combobox. En hoef je niets meer te zoeken in het werkblad.
Met meer dan 500 rijen in de database vind ik dat een beetje onoverzichtelijk.

Wat er moeilijk is aan het plaatsen van een voorbeeld bestand ontgaat mij altijd
De basis is een ingewikkelde database (met 57 kolommen en meer dan 500 rijen) en aardig wat vba code inmiddels. Ik kan het niet goed uitleggen, maar het is lastig daar een voorbeeldje van te fabrieken dat duidelijk maakt wat de bedoeling en wat het probleem is, zonder daar vele uren aan te moeten besteden. En dan ook nog zonder privacy gevoelige info. Maar het heeft niet zo heel veel zin om daarover te discussiëren, die energie kan ik beter aan het maken besteden. Ik moet alleen even nadenken over hoe ik dat slim doe. Zo werkt mijn hoofd nu eenmaal ;)
 
Laatst bewerkt:
Omdat je niet doet wat ik in #2 al zei.
Als je een voorbeeld documentje plaatst, wat VenA ook al zei, is je probleem zo opgelost.
 
Meer dan 500 rijen? poeh poeh. Als Excel dat maar aan kan.
 
Limieten Excel:
1.048.576 regels en 16.384 kolommen.

Je kan dus nog even ;)
 
Limieten Excel:
1.048.576 regels en 16.384 kolommen.
Je kan dus nog even ;)
Meer dan 500 rijen? poeh poeh. Als Excel dat maar aan kan.
Dat bedoel ik uiteraard niet; het is qua opslagrootte maar een klein bestandje. Maar verre van overzichtelijk, vandaar het userform. En dat ik geen zoekfunctie met combox wil! De gevonden rij moet gewoon weergegeven worden in de corresponderende velden van het userform. Ik heb niet zoveel ervaring met vba (tot nu toe enkel voor kleine handigheidjes gebruikt) maar toch verder wel een aardige macro aan elkaar gesmeed geloof ik. Alleen ben ik nu al zo lang met die zoekfunctie aan het klooien dat ik besloot te kijken of iemand me misschien kan helpen. Aan het voorbeeld wordt gewerkt! (Als ik iets doe, doe ik het goed! ;)), Wordt vervolgd dus!
 
Laatst bewerkt:
maak van
Code:
Dim zoeken As String
zoeken = TBXzoeken01.Value

eens
Code:
Dim zoeken As String
zoeken = "*" & TBXzoeken01.Value & "*"
 
Eindelijk een voorbeeldbestandje met fictieve namen en persoonsgegevens. Ik wilde het ook even helemaal maken zoals het uiteindelijk moet worden, zodat ik niet met de ene code de andere overhoop gooi. Ik geloof dat nu alles erin zit.

Er zijn 3 dingen waar ik niet uit kom. Ik hoop dat jullie me hiermee kunnen en willen helpen:

  • De al genoemde zoekfunctie; je moet nu de precieze achternaam intypen. Het zou fijn zijn wanneer je ook op een deel van de achternaam kunt zoeken.
  • De bedragen worden goed in de lijst gezet, maar worden niet opgeteld aan het einde van de rij. Hoe komt dat?
  • Ik wil graag dat na het toevoegen of wijzigen van records de rijen automatisch op alfabet (achternaam) gesorteerd worden. Ik heb al van alles geprobeerd, maar het lukt niet.
 

Bijlagen

  • 2019kerkbijdrageTEST.xlsm
    73,7 KB · Weergaven: 45
Laatst bewerkt:
Het is geen voorbeeldbestandje.
Haal eerst eens dit soort code eruit.
Code:
Private Sub OKafsluiten_Click()
    MsgBox "De database wordt opgeslagen en afgesloten."
    Application.Quit
    ThisWorkbook.Save
End Sub

Code:
Private Sub UserForm_QueryClose(iCancel As Integer, iCloseMode As Integer)
Dim waarschuwing As Integer

If iCloseMode = vbFormControlMenu Then
    iCancel = True
    waarschuwing = MsgBox("Gebruik de gele 'Afsluiten' knop", _
    vbOKOnly, "Close Form")
    
End If

End Sub

Code:
Private Sub Workbook_Open()

Application.Visible = False
Persoonsgegevens.Show

End Sub

Het heeft geen enkele toegevoegde waarde voor de vraag en bezoekers met wat minder ervaring zitten ineens met een verborgen en of afgesloten Excel.

Zie ook deze link: https://www.helpmij.nl/forum/announcement.php?f=348

Bij het zoeken op een achternaam begin je toch gewoon met de eerste paar letters van de naam te typen? En dan volstaat een combobox prima. Of ken je alleen maar een deel van de achternaam van de donateurs?
 
Het is geen voorbeeldbestandje.
Haal eerst eens dit soort code eruit.
Sorry, VenA. Maar dit is de code die ik in zijn geheel kloppend moet zien te krijgen en mijn hersenen werken helaas iets anders dan gemiddeld. Als alles in dit bestand goed werkt kan ik nu de hele code in 1x in het originele bestand zetten. Ik doe dit voor het eerst en raak de kluts kwijt als ik meerdere bestanden door elkaar ga gebruiken. Op deze manier heb ik overzicht en kan ik alles ook terug vinden. Bovendien zit op het formulier een knopje waarmee je de excellijst kunt openen, dus dit mag geen belemmering zijn. Mijn moeder (die ermee moet gaan werken en niet veel van het 'normale' Excel snapt) zou zich ook rot schrikken anders. En de melding bij het afsluiten is om te voorkomen dat de lijst afgesloten wordt zonder hem op te slaat. In theorie moet dit een prima digibetenbestand zijn dus.

Bij het zoeken op een achternaam begin je toch gewoon met de eerste paar letters van de naam te typen? En dan volstaat een combobox prima. Of ken je alleen maar een deel van de achternaam van de donateurs?
Nee, dat is nu juist het probleem. Vooral bij dubbele achternamen (gehuwden bv) begin je niet altijd met de goede naam. Het is maar net welke naam mensen in de wandelgangen gebruiken. Op die naam ga je zoeken. Vaak is deze anders dan de naam waar ze officieel in de GBA mee geregistreerd zijn. En die gegevens staan in onze database
 
Laatst bewerkt:
Ik vind het allemaal erg omslachtig, maar probeer het eens zo:
Code:
Private Sub CMBzoeken01_Click()

Dim zoeken As String
lastrow = Sheets("gegevens").Range("A" & Rows.Count).End(xlUp).Row
zoeken =[COLOR="#FF0000"] "*" & [/COLOR]TBXzoeken01.Value[COLOR="#FF0000"] & "*"[/COLOR]

For currentrow = 4 To lastrow Step 1
If Cells(currentrow, 3).Text[COLOR="#FF0000"] Like[/COLOR] zoeken Then

Wat Haije al zei dus, maar dan met wijziging in de vergelijking.
Werkt hier prima.
 
Laatst bewerkt:
Volgens mij had ik al geschreven dat het geen voorbeeldbestand is.
Vooral bij dubbele achternamen (gehuwden bv) begin je niet altijd met de goede naam
Waar staan die dan?

Als je zelf niet begrijpt wat waar staat dan wordt het wel lastig om zonder alles te verbouwen een beter programmaatje te maken. Dus maar hopen dat de suggestie van edmoor werkt.
 
Waar staan die dan?
Als je zelf niet begrijpt wat waar staat dan wordt het wel lastig om zonder alles te verbouwen een beter programmaatje te maken.
Wat wil je weten:D? Ik weet juist precies wat waar staat :thumb:! Daarom wil ik de code ook liever niet in stukjes knippen als iets wat dan wel een "voorbeeld" zou zijn. De volledige achternaam staat in de kolom ACHTERNAAM. Bij gehuwden dus vaak beide namen, maar het probleem zit in dat men soms de geslachtsnaam in de wandelgangen gebruikt en wij de naam van de partner niet kennen, terwijl deze wel als eerste geregistreerd is. Dan vind je deze persoon dus niet wanneer je op het begin van het veld moet zoeken.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan