combobox dynamisch vullen

Status
Niet open voor verdere reacties.

luus1901

Gebruiker
Lid geworden
21 mei 2009
Berichten
66
een combobox wordt gevuld m.b.v. de code

Code:
    ComboBox2.List = Application.Transpose(Filter([transpose(if(countif(offset($C$1,,,row(C1:C8000),C1:C8000)=1,C1:C8000),"~"))], "~", False))

afkomstig van http://www.snb-vba.eu/VBA_Fill_combobox_listbox.html

Dit werkt als een zonnetje, maar ik vraag me af of het mogelijk is om de range dynamisch te krijgen.


Wie helpt? (graag met een concreet voorbeeld)
 
Dat kan door het bereik een naam te geven.
Code:
 cells(1).currentregion.columns(3).name = "bereik"
  ComboBox2.List = Application.Transpose(Filter([transpose(if(countif(offset($C$1,,,row(bereik),bereik)=1,bereik),"~"))], "~", False))
application.names("bereik").delete

Aan het einde van de code is het een optie zoals hier aangegeven om de bereiknaam weer te verwijderen.
 
Helaas krijg ik dat bij mij niet werkend. Fout type komen niet overeen.

Weet niet zeker of ik het goed zie, maar "bereik" geeft een string en ik moet een range hebben, toch?
 
Dat komt vast doordat de gegevens in je bestand niet beginnen in cel A1.

Code:
cells(1,3).currentregion.name = "bereik"
 
Het oorspronkelijke voorbeeld van de hierboven genoemde website is
Code:
ComboBox1.List = Application.Transpose(Filter([transpose(if(countif(offset($A$1,,,row(A1:A100)),A1:A100)=1,A1:A100,"~"))], "~", False))

Dat heb ik aangepast waarbij ik er vanuit ging dat $C$1 betekent kolom C regel 1 en de row(C1:C8000) betekent regel 1 t/m 8000 in kolom C.

Het mag alleen uitgevoerd worden in kolom C.

Helaas geeft ook het nieuwe voorbeeld fout typen komen niet overeen.

Als ik een interpretatie fout maak hoor ik dat graag (met uitleg :confused: )
 
Plaats het bestand.
 
dan heb ik even tijd nodig om dit om te bouwen. wordt vervolgd

Edit: maar kan je (of iemand anders) in de tussentijd aangeven of mijn interpretatie van de coderegel klopt?
 
Laatst bewerkt:
Er is een haakje op de verkeerde plaats terechtgekomen (dat krijg je van kopiëren en wijzigen).

Code:
ComboBox2.List = Application.Transpose(Filter([transpose(if(countif(offset($C$1,,,row(bereik)[COLOR=#ff0000][SIZE=5])[/SIZE][/COLOR],bereik)=1,bereik,"~"))], "~", False))


Jouw interpretatie klopt.
 
Laatst bewerkt:
Dat is ook iets voor mij :) Helaas brengt het niet de oplossing. Dank je voor je meedenken:)

Omdat de broncode prima werkt in mijn bestand (met aanpassing van genoemde kolommen en rijen) lijkt het mij eigenlijk niets toevoegen om een uitgeklede versie te plaatsen.
Mijn vraag is alleen of de opgegeven range dynamisch gemaakt kan worden en daar is geen bestand voor nodig.

Misschien kan snb hier zijn kennis delen. Het is immers zijn broncode ;)
 
Jouw vraag heb ik beantwoord met een voorbeeld.
Succes ermee.

Je onderschrift past precies bij je.


Ps. Ter illustratie voor de niet eigenwijze vragenstellers een bestand.
 

Bijlagen

Laatst bewerkt:
Jammer dat je zo reageert.

Ik heb naar mijn beste weten een duidelijke vraag gesteld waarbij ik blij ben met jouw reactie. En ik herken niet mezelf in 'eigenwijs'

Trouwens ik dacht dat dit een help- forum was en niet een plek waar de vraagsteller wordt afgezeken als ze een terechte opmerking maken.
 
Als mijn vragen ook niet beantwoord worden lijkt het mij het beste dat je wacht op @snb.
 
Die de stijl van de vragensteller geen uitnodiging vindt om te reageren.
 
Option Explicit

Code:
Private Sub Workbook_Open()
    With Sheets(2)
        [COLOR=#FF0000]UserForm1.[/COLOR]ComboBox1.List = Application.Transpose(Filter([transpose(if(countif(offset($C$3,,,row(C3:C1003)[COLOR="#FF0000"]-2[/COLOR]),C3:C1003)=1,C3:C1003,"~"))], "~", False))
    End With
End Sub
Het werkt bij mij maar zeer traag (excel2007) wanneer ik een datum wil kiezen in de userform.
 
Laatst bewerkt:
Alphamax, dank je wel voor je reactie. :) Helaas is de range niet dynamisch. Nog ideeën?
 
Die de stijl van de vragensteller geen uitnodiging vindt om te reageren.

De stijl van sommige helpers nodigt niet uit tot vragen stellen. Misschien een iets te groot ego?
Gelukkig zijn hier ook helpers die daar geen last van hebben.
 
Doe er je voordeel mee.

Code:
Private Sub UserForm_Initialize()
   Range("C3", Cells(Rows.Count, 3).End(xlUp)).Name = "bereik"
   ComboBox1.List = Filter([transpose(if(countif(offset($C$3,,,row(bereik)-2),bereik)=1,bereik,"~"))], "~", False)
End Sub

Snellere methode is waarschijnlijk de dictionary methode.
 
Laatst bewerkt:
in kolom c is regel 2578 leeg, klopt dat?
 
Alphamax: ja dat klopt. In mijn werkbestand is dat ook zo en ik heb data zoals ze in dat bestand staan gekopieerd.

HSV: dank je wel. ik ga het zo uitproberen. Dictionary methode weet ik niet wat je bedoeld (mijn kennis schiet te kort). Zal op korte termijn kijken wat ik hierover kan vinden.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan