• 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 werkblad met TextBox

Status
Niet open voor verdere reacties.

Speedsurfer

Gebruiker
Lid geworden
3 aug 2019
Berichten
60
Beste Lezer

Ik zou graag willen weten welke code ik moet gebruiken en waar ik die moet plaatsen.
TextBox25 bovenin is een leeg veld alwaar ik iets in wil typen zodat de code gaat zoeken in mijn data en er de desbetreffende gegevens bij haalt.
Kan iemand mij bijstaan aub.
Grtz Speedsurfer

Private Sub CommandButton9_Click() 'Zoeken
Dim Bulunan_Satir_No As Long
With Worksheets("Artikellijst")
Bulunan_Satir_No = ListBox4.ListIndex + 2
TextBox24.Text = Sheets("Artikellijst").Range("B2" & Bulunan_Satir_No).Text 'Artikelnaam
TextBox23.Text = Sheets("Artikellijst").Range("E2" & Bulunan_Satir_No).Text 'Categorie
TextBox15.Text = Sheets("Artikellijst").Range("D2" & Bulunan_Satir_No).Text 'Prijs
TextBox17.Text = Sheets("Artikellijst").Range("G2" & Bulunan_Satir_No).Text 'Waarde
Dim mycontrol As Object
For Each mycontrol In Artikellijst.Controls
If TypeName(mycontrol) = "TextBox" Then
If IsNumeric(mycontrol.Value) Then
mycontrol.Value = Format(mycontrol.Value, "€ #,##0.00")
End If
End If
Next mycontrol
TextBox20.Text = Sheets("Artikellijst").Range("A2" & Bulunan_Satir_No).Text 'Artikel-ID
TextBox16.Text = Sheets("Artikellijst").Range("F2" & Bulunan_Satir_No).Text 'Aantal
TextBox24.Text = Sheets("Artikellijst").Range("B2" & Bulunan_Satir_No).Text 'Artikelnaam
End With
End Sub
 

Bijlagen

  • Zoeken met TextBox.docx
    239 KB · Weergaven: 41
Als er ook een listbox is, en die heet b.v. ListBox1, dan kun je dit in het Change event van TextBox25 zetten.
Code:
Dim i As Long
With ListBox1
  .List = Blad2.Cells(1).CurrentRegion.Value
   For i = .ListCount - 1 To 1 Step -1
     If InStr(LCase(Join(Application.Index(.List(), i + 1, 0))), LCase(TextBox25.Value)) = 0 Then .RemoveItem i
   Next i
 End With
Ook de range aanpassen als dit nodig is, dus Blad2 kan ook Blad1 of etc. zijn.
Als je nu iets gaat invullen in de textbox, wordt de resultatenlijst in je listbox steeds kleiner.
Enne... graag geen voorbeeld in Word, maar gewoon een (uitgekleed) Excel bestandje plaatsen, a.u.b.
 
Laatst bewerkt:
Dank voor de reactie.

Heb uw code in de mijn code ingevoegd.
Denk echter niet op de goede plek.

Met aanpassing van het de naam van mijn werkblad, krijg ik hem niet aan het zoeken.

Heeft u een suggestie waar ik de code moet plaatsen.?
Indien echt noodzakelijk zal ik mijn bestand moeten uitkleden om het voorbeeld mee te sturen.

Ik hoor graag van u.

Met vriendelijke groet
 
Mij lijkt een gelijkend voorbeeldbestand wenselijk. Daarnaast kan je voor de leesbaarheid even de de code in jouw OP tussen codetages plaatsen.:d
 
Beste.

Wederom dank voor de interesse om naar mijn vraag te kijken.

Heb het bestand uitgekleed en alleen dat daar gelaten alwaar het om gaat.

Het gaat om de knop Artikel Form, deze genereert een Userform.
Daar heb ik in de aliniea met groen geschreven,
dat daar naar mijn idee de zoek functie ingebouwd zou moeten worden.
Listbox4 is de tabel alwaar ik door kan scrollen, deze wil ik intact laten.
Mooiste zou zijn als ik over meerdere kolommen zou kunnen zoeken.
De onbenoemde lege witte regel is: ListBox 25 waar ik de te zoeken naam wil invoeren.

Ik hoop dat iemand mij kan helpen met het op de juiste plaats zetten van de code.
Er was al een suggestie maar ik krijg hem niet aan de gang.
Uiteraard doe ik iets verkeerd.
Ik hoor graag.
Grtz Speedsurfer
 

Bijlagen

  • Testbestand.xlsm
    388,6 KB · Weergaven: 46
Dit mag je onderaan de code van jouw userform plaatsen

Code:
Private Sub TextBox25_Change()
  With ListBox4
    .List = Sheets("Artikellijst").Cells(1).CurrentRegion.Value
    For i = .ListCount - 1 To 1 Step -1
     If InStr(LCase(Join(Application.Index(.List(), i + 1, 0))), LCase(TextBox25.Value)) = 0 Then .RemoveItem i
   Next i
 End With
End Sub
Het duurt bij mij wel ongeloflijk lang maar het werkt wel.

Waarom je eenduidige gegevens in 2 tabjes hebt staan en een veel te grote hoeveelheid data gaat inladen ontgaat mij even.
 
Ik heb een voorbeeldformuliertje gemaakt.
Ga daar eens mee stoeien en dan kom je er wel...
Succes
 

Bijlagen

  • GewoonFormulier.xlsb
    26,9 KB · Weergaven: 48
Dat was bij mij ook zo, VenA.
Zeer traag.

Jouw code staat ook in mijn formuliertje. Misschien heb ik hem wel van jou, weet ik niet meer...
 
Persoonlijk vind ik het een bizar slecht voorbeeld @mvdvlist. Maar misschien heeft de TS er wat aan dus laten we er maar even op wachten wat de TS er van vindt.:d

De traagheid zit in het steeds weer opnieuw laden van de Lisbox vanuit een werkblad. Beter kan je hier een tweede listbox of een publieke variabele voor gebruiken.;)
 
Je kan dat proces bij het typen van de tweede letter wel versnellen.

Zet deze bovenaan in de module van het Form.
Code:
Dim TbLen2 as long

Code:
Private Sub UserForm_Initialize()
 ListBox4.List = Sheets("Artikellijst").Cells(1).CurrentRegion.Value
 ListBox4.ListIndex = 0
End Sub
Code:
Private Sub TextBox25_Change() With ListBox4
  TbLen = Len(TextBox25)
   If TbLen2 > TbLen Then .List = Sheets("Artikellijst").Cells(1).CurrentRegion.Value
   TbLen2 = Len(TextBox25)
    For i = .ListCount - 1 To 1 Step -1
     If InStr(LCase(Join(Application.Index(.List(), i + 1, 0))), LCase(TextBox25.Value)) = 0 Then .RemoveItem i
   Next i
 End With
End Sub

Ps. Misschien is de methode met een 2e Listbox vele malen sneller.
 
VenA,

zou jij #4 eens nader willen uitleggen, of een linkje geven? Ik ben ook maar een beginner (pensionado) maar wil graag bijleren.
Overigens heb ik de manier van dit formulier een weegprogramma gemaakt voor mijn (ex) werkgever, en dat bevat inmiddels al > 15000 rijen data, en is niet bij te kijken. Klik en het staat er ,zo gezegd...

Maar iedere suggestie is leerzaam ....
 
Natuurlijk wil ik dat wel maar in #4 heb ik alleen om een voorbeeldje en het plaatsen van codetags gevraagd. Dus welke uitleg verlang je?

Jouw bestandje in #7 heb ik in #9 ,weliswaar met een smiley, als bizar slecht genoemd omdat het nogal omslachtig in elkaar steekt. Misschien spreken de TS en jij dezelfde taal en daarom heb ik er niets aan aangepast.

Als je suggesties wil over verbetering van jouw Form dan kan je daar natuurlijk zelf een draadje voor aanmaken. Anders gaat het hier waarschijnlijk een beetje door elkaar heen lopen.
 
Zoals aangegeven door mvdvlist en VenA werkt een en ander zeer traag.
Klopt bij mij nu ook.
En helaas bij mij loopt alles vast en is het afsluiten en opnieuw opstarten van Excel de enige oplossing om weer het een en ander uit te proberen.
Ook de opties van HSV ingevoegd, helaas vastlopers.
Ik ga er nog steeds van uit dat ik de code op de verkeerde plekken neer zet.
Uiteraard verschillende opties uitgetest.
Voor een indruk: dit testbestand omvat maar 25 regels.
Het originele ruim 3000
 
Waarom heb je dit?
Waarom je eenduidige gegevens in 2 tabjes hebt staan en een veel te grote hoeveelheid data gaat inladen ontgaat mij even.

Het testbestand bestaat overigens uit 4000 regels.
 
Sorry VenA,

ik bedoelde #9 inderdaad. Misschien heb je een linkje waarin ik code wat minder "omslachtig"kan maken.
Ik heb het meeste hier geleerd, dat had je al gezien aan "mijn"zoekfunctie". Die was exact dezelfde als van jou in #6.
Groet,

mvdvlist
 
De application.index is de boosdoener (die staat bekend als traag).
Verwijder die en koppel ze per column weer aan elkaar.
Ik denk dat daar wel snelheid mee is te realiseren.
Je hoeft ook niet alle kolommen op te nemen lijkt me.
 
Goede avond VenA

Een toelichting op de vraag vn de dubbele gegevens.
Het tabblad "Artikelen" is een wekelijks geïmporteerd CSV bestand.
Omdat ik daar niet mee kan/wil werken is er een extra tabblad die heet "Artikellijst"
Van daar uit kan ik verder werken mer de gegevens.
 
@mvdvlist,
Als je suggesties wil over verbetering van jouw Form dan kan je daar natuurlijk zelf een draadje voor aanmaken. Anders gaat het hier waarschijnlijk een beetje door elkaar heen lopen.
Miischien heb je dat wel gedaan maar heb ik nog niet gezien.:d
 
Snel genoeg?





Nb. het laatste stukje in het bestand mag je nog wel aanpassen naar:
Code:
Next i
        .List = Application.Index(sv, Application.Transpose(Split(s0, "|")), Array(1, 2, 3, 5))
         If UBound(ListBox4.List, 2) = 0 Then ListBox4.Column = ListBox4.List
 End With
 

Bijlagen

  • versnellen.xlsb
    250,7 KB · Weergaven: 49
Laatst bewerkt:
Goedemorgen.
Het toegevoegde voorbeeld bestand van VenA werkt als een malle.
Super.
Heb een en ander ingevoegd en verder uitgebreid in mijn eigen bestand en alles uitgetest.
Wel de nodige concessies moeten doen in de layout en functionaliteit.
Alle textboxen heb ik kunnen verwijderen omdat die niet meer werken, helaas.
Had graag gezien dat beide in samenwerking konden blijven bestaan.
Heb wel in de gaten dat met veeeeel minder code je bijna hetzelfde resultaat krijgt.
Ga het verder uit proberen.
Dank in ieder geval voor de geboden hulp.
Grtz Speedsurfer
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan