Avatar billede gladhund Nybegynder
18. juni 2011 - 11:57 Der 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?
Avatar billede gladhund Nybegynder
18. juni 2011 - 12:17 #1
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...
Avatar billede gladhund Nybegynder
18. juni 2011 - 16:58 #2
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

            'Filter
    Sheets("Idekatalog").Range("$A$1:$C$" & Sidste).AutoFilter Field:=3, Criteria1:= _
        "=*" & Me.txtSeachlstIdekatalog.Text & "*", Operator:=xlAnd

Sidste = Sheets("Idekatalog").Range("C1").End(xlDown).Row

    'Populate Listbox with filtered range
    Set rng = Sheets("Idekatalog").Range("C2:C" & Sidste).Cells.SpecialCells(xlCellTypeVisible)

MsgBox Sidste
MsgBox rng.Address

    With Me.lstIdekatalog
        .RowSource = ""
       
        'Add rows to the list box
        For Each c In rng
       
            .AddItem c.Offset(0, -2).Value
            .List(.ListCount - 1, 1) = c.Offset(0, -1).Value
            .List(.ListCount - 1, 2) = c.Value
           
        Next c
    End With

End Sub
Avatar billede gladhund Nybegynder
19. juni 2011 - 14:15 #3
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
Avatar billede gladhund Nybegynder
20. august 2011 - 13:21 #4
lukkes
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester