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

Vullen listbox met alleen gefilterde tabel

Status
Niet open voor verdere reacties.

AD1957

Verenigingslid
Lid geworden
27 feb 2016
Berichten
2.155
Onderstaande code vult de listbox netjes met de hele tabel.

Code:
Private Sub UserForm_Initialize()
ListBox1.List = Sheets("data").ListObjects(1).DataBodyRange.Value
End Sub

Nu wil ik de tabel eerst filteren en alleen het zichtbare gedeelte in de listbox hebben.
Kom er niet uit.:confused:
 
Ik filter nu in de listbox maar met 4000 rijen gaat dat vrij traag.
Morgen fris aan de slag met jouw voorstellen.:d
 
Hallo VenA,

Ik heb de handdoek maar in de ring gegooid.
In de listbox zie ik de onzichtbare rijen, moeten echter de zichtbare rijen zijn.
Kom er maar niet achter hoe dit op te lossen.
Krijg de code niet onder de pet:evil:
Zou fijn zijn als je deze gestreste persoon enige uitleg kan geven.
 
In ar wordt de koptekst niet meegenomen hierdoor verschuift alles 1 rij en krijg je de verkeerde gegevens.

Code:
 x = x & "|" & cl.Row [COLOR="#FF0000"]- 1[/COLOR]
 
Bedankt:thumb:
Zou je misschien nog wat uitleg kunnen geven over de code, of een link waar ik deze uitleg kan vinden?
Eerlijkheidshalve, ik begrijp er geen.......van. :D
 
Hallo,

Als beginnend vba-fan wil ik me natuurlijk niet meten met de echte specialisten, maar dit moet ook werken (en trouwens ook niet traag, én misschien net ietsje makkelijker te begrijpen)
Code:
Private Sub UserForm_Initialize()
  
With Sheets(1)
  r = Cells(Rows.Count, 1).End(xlUp).Row
  a = 0
  For i = 1 To r
    If Rows(i).RowHeight Then
      a = a + 1
    End If
  Next i
  ReDim lijst(1 To a, 1 To 3)
  a = 0
  For i = 1 To r
    If Rows(i).RowHeight Then
      a = a + 1
      For k = 1 To 3
         lijst(a, k) = Cells(i, k)
      Next k
    End If
  Next i
  ListBox1.List = lijst
End With

End Sub
 
Enigmasmurf,
Voor zover ik kan controleren werkt de code. Moet 'm alleen nog volledig testen.

VenA,
Jouw code heb ik nu volledig werkend. Werkt ook op het event Textbox1_Change.
Hier doet zich echter iets vreemds voor:
Als bij het filteren via de textbox slechts 1 rij in de tabel overblijft wordt de ListBox niet meer goed weergegeven.:(
 

Bijlagen

Plus twee extra voordeeltjes.

Code:
Private Sub TextBox1_Change()
Sheets(1).ListObjects(1).Range.AutoFilter Field:=2, _
    Criteria1:="*" & TextBox1.Value & "*", Operator:=xlFilterValues
 sv = Sheets(1).ListObjects(1).DataBodyRange.SpecialCells(12)
    For i = 1 To UBound(sv)
      x = x & i & "|"
    Next i
   ListBox1.List = Application.Index(sv, Application.Transpose(Split(x, "|")), Array(1, 2, 3, 4))
'ActiveWindow.SmallScroll Down:=-5000
End Sub


Private Sub UserForm_Initialize()
  sv = Sheets(1).ListObjects(1).DataBodyRange.SpecialCells(12)
      For i = 1 To UBound(sv)
       x = x & i & "|"
      Next i
    ListBox1.List = Application.Index(sv, Application.Transpose(Split(x, "|")), Array(1, 2, 3, 4))
 End Sub
 
Dit stond al in de klik van de commandbutton.
Code:
ListBox1.List = Sheets("Sheet1").ListObjects(1).DataBodyRange.Value
Dus zal wel een bedoeling hebben om dat niet in de 'Initialize' op te nemen gezien mijn voorgangers.

Voor de rest zie ik niets minder maar juist een listbox meer. :d
 
Die kun je helemaal niet zien.
En een aantal overbodige knoppen + code is verwijderd.

Je kunt mijn Initialize ook beperken tot ListBox2.List=sheet1.listobjects(1).databodyrange.value
Dus een stuk 'minder' code in deze gebeurtenis.
Dan start je echt met een schone lei.
 
Laatst bewerkt:
VenA, Enigmasmurf, Harry, snb,

Iedereen hartelijk dank voor de hulp, hier kan ik weer verder mee.
p.s. Geen ruzie maken. be happy :D:D:D
 
Volgens mij dwaalt de vraag af van de initiële vraag 'Vullen listbox met alleen gefilterde tabel'

@HSV,
bij mij wordt gewoon de hele databodyrange ingeladen met
Code:
sv = Sheets(1).ListObjects(1).DataBodyRange.SpecialCells(12)
Specialcells(12) wordt dus genegeerd.

@snb, Wat is het voordeel van een 2e listbox tov een een publieke variabele?

@AD1957, dat is geen ruzie. We sparren graag om er voordeel mee te doen:D
 
@VenA,

Waar wordt dat genegeerd in jouw code van #4.

Code:
Private Sub UserForm_Initialize()
  With Sheets(1).ListObjects(1).DataBodyRange
  ar = .Value
    For Each cl In .Columns(1)[COLOR=#ff0000].SpecialCells(12)[/COLOR]

In Excel 2007 wordt .specialcells(12) niet genegeerd direct achter .databodyrage.
 
Laatst bewerkt:
Met deze regel in #12
Code:
sv = Sheets(1).ListObjects(1).DataBodyRange.SpecialCells(12)
impliceer je dat er alleen de zichtbare cellen in sv ingeladen worden wat niet het geval is. In mijn loopje wordt er gekeken of een rij zichtbaar is of niet.
 
@AD1957, dat is geen ruzie. We sparren graag om er voordeel mee te doen

:thumb: wist ik wel, stoei fijn verder, voor mij en velen alleen maar leerzaam.
Ik zet de vraag als opgelost, mocht er nog iets komen dan zal ik het met interesse volgen.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan