ComboBox lijst wordt niet goed weergegeven

Status
Niet open voor verdere reacties.

MaikBisschop

Gebruiker
Lid geworden
19 mrt 2018
Berichten
39
Beste helpmij-ers,

Ik heb een UserForm met daarop 4x een ComboBox. Deze keuze lijst van deze ComboBoxen is afhankelijk van een bepaald getal.

Code:
    For cb = 1 To 4
        For lc = [B]2[/B] To (Sheet2.Range("[B]D3[/B]") - 1)
            With Me.Controls("ComboBox" & cb)
                .Clear
                .AddItem lc
            End With
        Next lc
    Next cb

Stel dat cel D3 de waarde 10 heeft

De lijsten van deze ComboBoxen moet de nummers 2 (standaard start nummer) t/m 9 (het nummer in cel D3 - 1) bevatten, echter geeft deze alleen 9 (het nummer in cel D3 -1) neer.
Hoe komt dit en hoe kan ik dit oplossen? Er is ook een voorbeeld bestand gemaakt (zie bijlage).

Bekijk bijlage Probleem.xlsm

Groeten,

Maik
 
Laatst bewerkt:
Omdat je iedere keer voordat je de combobox vult een .Clear doet.
Zo blijft alleen het laatste item staan.
 
Oké duidelijk! heb het getest en dat klopt. Maar nu kom ik op het volgende punt:

Eventuele oplossing:
.Clear verwijderen
Voortkomend probleem:
Omdat de code in UserForm_Activate staat, wordt de lijst steeds groter wanneer ik tussen UserForm switch ( 2 t/m 9 + 2 t/m 9 + 2 t/m 9 etc).

Eventuele oplossing:
.Clear verwijderen en code in UserForm_Initialize zetten (zodat er maar 1 keer wat toegevoegd wordt..
Voortkomend probleem:
Wanneer ik op een andere UserForm iets aanpas waardoor cel D3 5 wordt i.p.v 10, dan wordt de lijst niet aangepast omdat het initialize event maar 1x plaats vindt.

Iemand nu een oplossing?

- Maik
 
Probeer het eens zo:

Code:
Private Sub UserForm_Initialize()

    For cb = 1 To 3
        With Me.Controls("ComboBox" & cb)
             .Clear
            For lc = 2 To (Sheet2.Range("D3") - 1)
                 .AddItem lc
            Next lc
         End With
     Next cb
    
End Sub

cb = 1 to 3 staat in jouw code, dus dat heb ik maar zo gelaten
 
Laatst bewerkt:
Dit is voldoende:

Code:
 sub M_snb()
  with combobox1
    .List=evaluate("row(2:"&(Sheet2.Range("D3") - 1)&")")
    combobox2.list=.list
    combobox3.list=.list
    combobox4.list=.list
  end with
end Sub

NB. Vermijd .additem als het om meer dan 1 item gaat.
 
Laatst bewerkt:
@ Snb,

Wat is de reden dat .AddItem beter kan worden vermeden? Ik heb zelf een projectje afgerond waarbij ik dit wel heb gebruikt en het naar behoren werkt.

Gr.

Sjon
 
- de methode is niet bedoeld voor het vullen van een combobox/listbox
- de methode is merkbaar traag
- bij het vullen moet eerst de methode .clear worden gebruikt.
- met .additem kun je geen meerdimensionele array toevoegen

Voor het overige zie hier: http://www.snb-vba.eu/VBA_Fill_combobox_listbox.html
 
Laatst bewerkt:
++ Nadeel / voordeel is dat .List de types (string, Long , integer, etc) meeneemt in de List, AddItem voegt altijd een String toe.
Een ComboBox.value is ook altijd een string
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan