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

Opgelost 'Identieke' zoekfuncties gedragen zich verschillend

  • Onderwerp starter Onderwerp starter erpee
  • Startdatum Startdatum
Dit topic is als opgelost gemarkeerd
Status
Niet open voor verdere reacties.

erpee

Gebruiker
Lid geworden
21 jan 2009
Berichten
118
Ik heb in een applicatie op 2 plekken een zoekfunctie. In mijn ogen identiek (Alleen wat opmaakverschillen), zoeken ook in dezelfde sheet, maar toch..
Code 1 werkt zoals het moet, vindt alles wat je zoekt.
Code 2 vindt slechts een deel van de resultaten.

Vraag is dus, wat zie ik over het hoofd in code 2?

Code 1
Code:
Private Sub txtZoekVeld_Change()
Me.txtZoekVeld = Format(Trim(StrConv(Me.txtZoekVeld, vbLowerCase)))

Dim sh As Worksheet
Set sh = Sheets("ProductData")
Dim i As Long
Dim x As Long
Dim p As Long
Me.lstSearchResults.Clear

Me.lstSearchResults.ForeColor = RGB(229, 111, 33)
Me.lstSearchResults.AddItem "Artikel"
Me.lstSearchResults.List(0, 1) = "Locatiecode"

Me.lstSearchResults.Selected(0) = True

For i = 2 To sh.Range("B" & Rows.Count).End(xlUp).Row
For x = 1 To Len(sh.Cells(i, 2))
p = Me.txtZoekVeld.TextLength

If LCase(Mid(sh.Cells(i, 2), x, p)) = Me.txtZoekVeld And Me.txtZoekVeld <> "" Then
With Me.lstSearchResults
.AddItem sh.Cells(i, 2)
.List(lstSearchResults.ListCount - 1, 1) = sh.Cells(i, 3)


End With

End If
Next x
Next i

End Sub

Code 2
Code:
Private Sub txtBwSearch_Change()
Me.txtBwSearch = Format(Trim(StrConv(Me.txtBwSearch, vbLowerCase)))

Dim sh As Worksheet
Set sh = Sheets("ProductData")
Dim i As Long
Dim x As Long
Dim p As Long
Me.LstSearch.Clear

Me.LstSearch.AddItem "Omschrijving"
Me.LstSearch.List(LstSearch.ListCount - 1, 1) = "Productcode"
Me.LstSearch.List(LstSearch.ListCount - 1, 2) = "Loc. code"
Me.LstSearch.List(LstSearch.ListCount - 1, 3) = "Prijs"
Me.LstSearch.List(LstSearch.ListCount - 1, 4) = "Voorraad"
Me.LstSearch.List(LstSearch.ListCount - 1, 5) = "Minimum Vr."

Me.LstSearch.Selected(0) = True

For i = 2 To sh.Range("B" & Rows.Count).End(xlUp).Row
For x = 1 To Len(sh.Cells(1, 2))
p = Me.txtBwSearch.TextLength

If LCase(Mid(sh.Cells(i, 2), x, p)) = Me.txtBwSearch And Me.txtBwSearch <> "" Then
With Me.LstSearch
    .AddItem sh.Cells(i, 2)
    .List(LstSearch.ListCount - 1, 1) = sh.Cells(i, 1)
    .List(LstSearch.ListCount - 1, 2) = sh.Cells(i, 3)
    .List(LstSearch.ListCount - 1, 3) = "€" & sh.Cells(i, 4)
    .List(LstSearch.ListCount - 1, 4) = sh.Cells(i, 5)
    .List(LstSearch.ListCount - 1, 5) = sh.Cells(i, 6)

End With
End If
Next x
Next i

End Sub
 
Laatst bewerkt:
Gebruik .list om een Listbox / combobox te vullen; additem is bedoeld voor 1 item, niet voor een lijst.
Vermijd overbodige variabelen (vooral objectvariabelen)
Reduceer de interactie met een werkblad tot een minimum: 1 maal lezen, 1 maal schrijven.

Code:
Private Sub txtZoekVeld_Change()
  if txtZoekVeld<>"" then
    with Sheets("ProductData").cells(1).currentregion
      .autofilter 2, lcase(trim(txtZoekVeld))
      .copy Sheets("ProductData").cells(1,100)
      .autofilter
    end with

    lstSearchResults.list=Sheets("ProductData").cells(1,100).currentregion.resize(,2).value
    Sheets("ProductData").cells(1,100).currentregion.clearcontents
  end if
End Sub
 
Laatst bewerkt:
De code die je stuurt werkt bij mij niet. Er worden geen zoekresultaten getoond.
 
Daarom is een voorbeeld documentje altijd zo handig.
 
@RP

Je moet in een werkblad nooit kolom A leeg laten.
 
Daarom is een voorbeeld documentje altijd zo handig.

Die snap ik helemaal, maar het is niet handig om die hele nieuwe applicatie hier neer te zetten, Ik zal kijken of ik 'm uit kan kleden en dan hier plaatsen.
 
1 sheet met wat gegevens, 1 userform, 1 textbox, 1 listbox.
Klaar in < 5 minuten.
 
Als bijlage een voorbeeld.

Wat ik dus wél van belang vind, zijn die headers (al dan niet in kleur) in de Listbox. Wellicht kan dit ook op een veel betere manier.
 

Bijlagen

Dank voor jullie input. IK zal kijken hoe ik dit kan implementeren.
 
Voor de headers: gebruik gewoon labels en zet deze boven de listbox.
 

Ik ga nu voor deze benadering. Ik gebruik daarbij ook de tip van @AD1957 (Waarvoor dank:thumb:) om labels te gebruiken als KolomTitels

Wat me wel opvalt (En dat komt mede omdat ik de code niet begrijp :o) is dat rij1 ook geplaatst wordt. Dit zijn alleen titels uit het blad en die wil ik in het zoekvenster er natuurlijk niet bij hebben.
Ik zie dus niet hoe je de data pas kunt laden vanaf rij 2.
 

Bijlagen

De leerlingen die er mee moeten werken raken hierdoor in de war, vandaar.
 
Laatst bewerkt door een moderator:
probeer het maar eens zo.
Code:
Private Sub UserForm_Initialize()
   lstSearchResults.List = Blad3.Cells(1).CurrentRegion.Offset(1).Value
End Sub
of maak van de data een dynamische tabel.
Code:
Private Sub UserForm_Initialize()
   lstSearchResults.List = Blad3.ListObjects(1).DataBodyrange.Value
End Sub
 
Top! precies wat ik zocht.
 
Laatst bewerkt door een moderator:
Kun je (als lid sinds 2009) stoppen met zinloos citeren/quoten ?
Gebruik de goede, blauwe reaktieknop.
 
Wat voor de een 'zinloos' mag lijken, is voor de ander verhelderend.
Mocht ik met quoten een forumregel overtreden, dan daarvoor mijn excuses
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan