Opgelost ComboBox met List

Dit topic is als opgelost gemarkeerd
Status
Niet open voor verdere reacties.

DutchOirs

Gebruiker
Lid geworden
30 sep 2009
Berichten
899
Goedenavond,

Heb een vraagje over het inlezen met .List met een ComboBox

Op zich werkt goed, maar meestal heb je wel een balk boven je rijen staan met bv. "Cattegorie"
Als je dan met List de data voor de ComboBox inleest, neemt hij dit gegeven ook mee.
Is hier eventueel een oplossing voor?
Gebruik als macro:
Code:
  ZoekNaamCB.List = Sheets("DBase").Range("H9").CurrentRegion.Columns(1).Value
De evt. data die in cel H8 staat neemt hij ook mee met inlezen.

Weet dat je het met een range kan oplossen, maar is een database die aangevuld wordt, dus moet flexibel werken

Thanks bij bij voorbaat.

Dutch
 
Code:
ZoekNaamCB.List = Sheets("DBase").Range("H9").CurrentRegion.Columns(1).Value
ZoekNaamCB.RemoveItem (0)
 
Maak er een tabel van , dan kan je onderstaande gebruiken.
Code:
ZoekNaamCB.List = Sheets("DBase").ListObjects(1).DataBodyRange.Columns(1).Value
 
Toppie mensen bedankt.
Denk dat ik voor de 1e gaat, begrijp ik het best :)
Gebruik geen Tabellen, geeft ook weer de nodige problemen, maar thanks anyway Warm Bakkertje.

Heb het verhaal bijna rond maar loop toch nog tegen iets aan wat ik niet snap.
Onder activate van het file:

Code:
Private Sub UserForm_activate()
  Dim sn, i As Integer, x0, lRowDBase As Integer
  CattegorieCB.Clear
  ZoekNaamCB.Clear: ZoekNaamCB = ""
  CattegorieCB = "Alle"
  If CattegorieCB = "Alle" Then
    ZoekNaamCB.List = Sheets("DBase").Range("H9:H19").Columns(1).Value
  End If

  sn = Sheets("Data").Cells(9, 4).CurrentRegion.Value     ' aantal cattegorieen (vanaf rij - kolom)
 
 With CreateObject("scripting.dictionary")             ' geeft alle cattegorien (geen dubbele namen)
     For i = 2 To UBound(sn)     ' [ 2 - 6]
       x0 = .Item(sn(i, 4))      ' [ rij, kolom ]
     Next
     CattegorieCB.List = Application.Transpose(.keys)
  End With
End Sub

Krijg de foutmelding Het subscript valt buiten het bereik (Fout 9)
Deze foutmelding komt bij:
"sn = Sheets("Data").Cells(9, 4).CurrentRegion.Value ' aantal cattegorieen (vanaf rij - kolom)"
Heb op wb. Data D9:14 de cattegorieen staan (nummers)
Hier geeft hij ook op de foutmelding.
Dacht dat .cells(9,4) Rij 9 en kolom D was?
Vanaf deze cel leest hij toch de regio in?

AANPASSING: foutmelding komt bij: "x0 = .item(sn(i, 4))"
Hij leest de Cattegorie in van wb. Dat cel D9:D14



Ok, testfiletje erbij.
 

Bijlagen

Laatst bewerkt:
Wees eindelijk eens slim en plaats, zoals altijd gevraagd, een voorbeeldbestandje
 
Je array sn heeft maar één kolom en niet vier.
Verder kun je dit
Code:
  CattegorieCB = "Alle"
  If CattegorieCB = "Alle" Then
    ZoekNaamCB.List = Sheets("DBase").Range("H9:H19").Columns(1).Value
  End If
vervangen door
Code:
ZoekNaamCB.List = Sheets("DBase").Range("H9:H19").Columns(1).Value
 
Hee thanks AHulpje,
Ging niet om onderstaande,
Code:
  If CattegorieCB = "Alle" Then
    ZoekNaamCB.List = Sheets("DBase").Range("H9:H19").Columns(1).Value
  End If
Dit werkte goed.
Maar ging om deze:
Code:
  sn = Sheets("Data").Cells(9, 4).CurrentRegion.Value     ' aantal cattegorieen (vanaf rij - kolom)
  With CreateObject("scripting.dictionary")               ' geeft alle cattegorien (GEEN DUBBELE NAMEN)
    For i = 2 To UBound(sn)     ' [ 2 - 6]
 '     x0 = .Item(sn(i, 4))      ' [ rij, kolom ] DEZE WAS FOUT!!!
      x0 = .Item(sn(i, 1))      ' [ rij, kolom ]   
    Next i
    CattegorieCB.List = Application.Transpose(.keys)
  End With
heb dus x0 = .ITEM(SN(I, 4)) aangepast naar: x0 = .ITEM(SN(I, 1)) en dat werkt!
Als ik "sn = Sheets("Data").Cells(9, 4).CurrentRegion.Value"verander naar: sn = Sheets("Data").Cells(9, 1).CurrentRegion.Value geeft dat een foutmelding Fout 13 Typen komen niet overeen!
 
Dan moet je die laatste verandering dus terugdraaien, je verwijst daarmee namelijk naar een leeg bereik.
En met mijn eerste opmerking bedoelde ik niet dat je code niet zou werken, maar dat je van vier regels code één regel kon maken.
En categorie is met één t;)
 
Goedenavond allen,

emields, het is een test file en uiteindelijk wordt dit in een ander file geïmplanteerd.
Het betreft een adressenbestand voor bedrijven.
Heb als extra een categorie ingevoegd om bedrijven met hetzelfde werk te kunnen vinden.
Vervolgens deze gezamenlijk te kunnen printen of PDF van te maken.

Denk dat ik eruit ben, zou zeggen bekijk het nog eens en als je een idee hebt....

Allen bedankt voor de hulp.

Dutch

nieuw vb-tje erbij.
 

Bijlagen

Goedemorgen emields,
Zoals ik hierboven al aangaf, betreft een testfile-tje voor een onderdeel van een adressenbestand, wat weer een onderdeel is van een groter program.
Vandaar de moeilijke opzet, maar je hebt met allerlei onderdelen te maken.
Thanks anyway voor de moeite.

Groety

Dutch
ps. zet hem op opgelost.
 
Nogmaals goedemorgen,

Zit toch nog een klein foutje in.
Probeer het uit te zoeken, maar kom er ff niet uit.
Misschien dat jullie het zien.
Gaat om hert volgende:
Als ik het file opstart leest hij de .List in van de ZoekNaamCB dat is ok
Als ik dan CattegorieCB een keuze maak, leest hij deze gegevens in en zet het tevens op Blad1.R4 neer.
Dit doet hij goed, maar alleen de eerste keer geeft hij geen Categorie (kolom u) weer.
Pas bij de 2e keer een andere keuze in CategorieCB en dan zet hij het wel neer.
Fout zit hem in dit stukje:

Code:
  If CattegorieCB <> "" And CattegorieCB <> "Alle" Then
    Dim lRowDBase As Integer, lRowData As Integer, Data
    ZoekNaamCB.Clear: ZoekNaamCB = ""
    With Sheets("DBase")                                        ' LEEST BEDRIJFSNAMEN V/D GEKOZEN CATEGORIE IN voor ZoekNaamCB.List
      lRowDBase = .Range("H" & .Rows.Count).End(xlUp).Row       ' laatste regel
      Data = Filter(Evaluate("transpose(if(" & "DBase!" & .Range("K9:K" & lRowDBase).Address & "=" & CattegorieCB.Value & "," & "DBase!" & .Range("H9:H" & lRowDBase).Address & ",false))"), False, 0)
      ZoekNaamCB.List = Application.Transpose(Data)
    End With
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    Dim res(), lRowTarget As Integer, i As Integer, j As Integer, k As Integer, sn, wRow
    ReDim res(1 To ZoekNaamCB.ListCount, 1 To 4) '4)     '  18 = 18 kolommen
    With Sheets("Blad1")
      lRow = .Range("R" & .Rows.Count).End(xlUp).Row   ' laatste regel
      .Range("R4:U" & lRow + 1).ClearContents                               ' maakt Matrix cattegorie schoon
    End With
            '   wb. DBase[Rij 8, kolom 8 = H  en                  4 kolommen]
    sn = Sheets("DBase").Cells(8, 8).CurrentRegion.Offset(1).Resize(, 4)   ' leest in van Rij 8, kolom 8 en 4 kolommen breed
    For i = 0 To ZoekNaamCB.ListCount - 1
   '# wRow is de rij in de matrix waar gevonden cattegorie zijn
      wRow = Application.Match(ZoekNaamCB.List(i), Application.Index(sn, 0, 1), 0)  ' leest de Matches in Index sn = start Rij- kolom = huidige - stap per 1 rij
      j = j + 1
        '#    [ 4 = aantal kolommen data]
      For k = 1 To 4           ' 1 to 3 kolommen breed
        res(j, k) = sn(wRow, k)
      Next
    Next
    With Sheets("Blad1")
      lRowTarget = .Range("R" & .Rows.Count).End(xlUp).Row   ' laatste regel
      .Range("R" & lRowTarget + 1).Resize(UBound(res), lRow) = res  ' zet vanaf AL9, de ingelezen data met gegevens neer
      Label3 = "Geeft aantal v/d gekozen Categorie aan:"
      LabelAantal = lRowTarget        ' geeft LabelAantal het juiste aantal gekozen categorie
    End With
  End If
End Sub
Denk, maar weet het niet zeker, dat het met de "Dim" of "Redim" te maken heeft
Hebben jullie een idee?
 
Goedemorgen snb,
Bestand staat hierboven, de laatste.
Maar hoeft niet meer ben eruit.
Fout zat hem in:
Code:
   .Range("R" & lRowTarget + 1).Resize(UBound(res), lRow) = res  ' zet vanaf AL9, de ingelezen data met gegevens neer

6e regel van onderen.
Die lRow is niet goed, moet aantal worden v/d kolommen.
Dus in dit geval 4
Code:
   '   .Range("R" & lRowTarget + 1).Resize(UBound(res), 4) = res  ' zet vanaf AL9, de ingelezen data met gegevens neer
 
Thanks snb, heel andere opzet en aangezien het geïmplementeerd moet worden in een ander file, gaat dit niet lukken.
Opzet is simpeler en ook beter, maar zit aan bepaalde voorwaarde vast in het andere File.

Laatste opzet hierbij.
 

Bijlagen

Probeer er vooral wat van te leren. Bekijk de code eerst eens goed. Dat heb je nog niet gedaan.
De opzet van het userform staat volledig los van hoe eventuele resultaten verder verwerkt worden.

In tegenstelling tot jouw bewering is het helemaal geen andere opzet.
Gebruik in een Excelwerkblad altijd cel A1.

Overigens schrijven we in het Nederlands het woord castegorie met een enkele t.
 
Hoi snb,
Om met het laatste te beginnen,
castegorie schrijf je niet met een S..:-)
Weet het wel dat je categorie met 1 T schrijft en AHulpje had dit ook al aangegeven.
In m'n hoofdfile noem ik het "ZoekCattCB"
En daar komt bij wat is een woord?
En ten 2e om jouw codes te begrijpen moet je toch wel wat meer in je mars hebben.
En zal er misschien wel uit komen maar kost veel tijd.

Fijne dag verder
 
Ja loopt toch nog tegen een probleempje op :-(

Bij het zoeken onder CategorieCB staat:
Code:
Data = Filter(Evaluate("transpose(if(" & "DBase!" & .Range("K9:K" & lRowDBase).Address & "=" & CattegorieCB.Value & "," & "DBase!" & .Range("H9:H" & lRowDBase).Address & ",false))"), False, 0)

Dit werkt perfect, zolang de Categorie gegevens uit een cijfer bestaat.
Maar zou tekst moeten zijn en geeft hierbij gelijk de fout aan: "Typen komen niet met elkaar overeen"Fout #13

Hoe kan ik het zo aanpassen dat hij tekst kan filteren?

Iemand nog een idee?

Thanks
Dutch
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan