18. juni 2011 - 11:57Der er
3 kommentarer og 1 løsning
Filter userform listbox via textbox
Hej eksperter,
Jeg har en userform med en listbox med tre kolonner og en tekstboks til en søgetekst.
Jeg ønsker at skrive i tekstboksen, og at der sker følgende: - Ved hvert tastetryk (incremental search) søges i listboxen og kun de poster hvor tredie kolonne indeholder bogstav/ord vises (ligesom autofilter "Indeholder").
Jeg har fundet flere eksempler på nettet, men kun til en enkelt kolonne, og jeg har tre.
Jeg har også forsøgt med autofilter, men jeg får vist alle poster opefter, fordi der også vises de skjule linjer... måske man kan bruge dette med noget usedrange eller specialcells - visible?
Det vil også være OK at indtaste en søgestreng og så klikke på en 'Søg' knap - jeg kunne forestille mig, at det vil gøre det nemmere. OG værdien af inkrementalsøgning er nok ikke besværet værd...
Foreløbig har jeg fundet frem til dette, der fungerer - dog ikke hvis kun EN post skal vises, da får jeg en fejl, fordi rng bliver: 1:2, 103:1048576... Kan nogen hjælpe med dette?
Public Sub SearchIdekatalog()
Dim rng As Range Dim c As Range Dim Sidste As Integer
'Filter the sheet
Sidste = Sheets("Idekatalog").Range("A5000").End(xlUp).Row
Jeg har også forsøgt med denne variant, men her fyldes listen op forkert: 1. Først med korrekte værdier fra de tre kolonner, i de rigtige kolonner 2. Så med værdierne fra kolonne 2 og tre, men i kolonne 1 og 2 3. Så med værdien fra kolonne 3 men i kolonne 1... Og derefter samme med næste post.
Har jeg sat for få point på til at nogen vil hjælpe?
Dim Lastrow As Long Dim i As Integer
Dim rng As Range, r As Range With Worksheets("Idekatalog") Lastrow = .Range("C65536").End(xlUp).Row .Range("A1:C" & Lastrow).AutoFilter Field:=3, Criteria1:="*" & Me.txtSeachlstIdekatalog.Text & "*" Set rng = .Range(.Cells(2, 1), .Cells(Lastrow, 3))
Set rng = rng.SpecialCells(xlCellTypeVisible) ReDim rtab(0 To rng.Count - 1, 1 To 3)
i = 0 For Each r In rng
MsgBox "r: " & r
rtab(i, 1) = r.Value rtab(i, 2) = r.Offset(0, 1).Value rtab(i, 3) = r.Offset(0, 2).Value i = i + 1 Next
End With With frmIdekatalog .lstIdekatalog.RowSource = "" .lstIdekatalog.ColumnCount = 3 .lstIdekatalog.List = rtab End With
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.