Waarden in combobox op userform vullen vanuit sheet

Status
Niet open voor verdere reacties.

remcop1989

Gebruiker
Lid geworden
29 mrt 2012
Berichten
492
Het is vast en zeker al veel vaker gevraagd, maar ik kan het eenvoudig weg niet vinden. Ik heb de volgende links al geprobeerd, maar die helpen niet:

http://www.mrexcel.com/forum/excel-...-form-visual-basic-applications-beginner.html
http://www.fontstuff.com/vba/vbatut10.htm

Wat ik heb:
- Een sheet "Bedrijven" met een hele lijst bedrijven. Het aantal hiervan is onbekend, gezien er continue bedrijven worden toegevoegd
- Een userform "frmContacttoevoegen" waarop een contactpersoon bij bedrijven kan worden toegevoed. In dit userform zit een combobox (cmbBedrijfsnaam).

Wat ik wil:
- De combobox cmbBedrijfsnaam op frmContacttoevoegen laten vullen met alle waarden uit sheet "Bedrijven"

Wie helpt mij in de goede richting?

Het bestand: http://www.mijnbestand.nl/Bestand-3PLA3XBZE886.xlsm
 
Op de site van snb staan diverse manieren een comboboxen te vullen
http://www.snb-vba.eu/VBA_Fill_combobox_listbox.html

Plaats deze onder Private Sub UserForm_Initialize()

Zoiets dus:
Code:
Private Sub UserForm_Initialize()
    For Each b In Sheets("Onderwerpen").Columns(1).SpecialCells(2).Offset(1).SpecialCells(2)
        bedr = bedr & "|" & b.Value
    Next
    cmbBedrijfsnaam.List = Split(Mid(bedr, 2), "|")
End Sub
 
Laatst bewerkt:
Verander dan in de code Sheets("Onderwerpen") naar Sheets("Bedrijven")

Uitleg:
Code:
Private Sub UserForm_Initialize()
    'voor elke variabele in tabblad bedrijven in de eerste kolom alle cellen met waardes
    For Each b In Sheets("Bedrijven").Columns(1).SpecialCells(2).Offset(1).SpecialCells(2)
        'groepeer alle variabele
        bedr = bedr & "|" & b.Value
    Next
    'de lijst van de combobox is een splitsing van de variabele in de groepering
    cmbBedrijfsnaam.List = Split(Mid(bedr, 2), "|")
End Sub
 
Getest en goed gekeurd door mezelf (zonder iets te veranderen)

Zie het al...
Je moet wel de ene userform verbergen (Hide.Me) of unloaden (Unload Me).
Plaats dit achter je hoofdmenu buttons
Code:
Private Sub cmdActiviteiten_Click()
Unload Me
    frmActiviteiten.Show
End Sub

Private Sub cmdBedrijftoevoegen_Click()
Unload Me
    frmBedrijftoevoegen.Show
End Sub

Private Sub cmdContactpersoontoevoegen_Click()
Unload Me
frmContacttoevoegen.Show
End Sub

Private Sub cmdOnderwerp_Click()
Unload Me
    frmOnderwerpen.Show
End Sub
 

Bijlagen

Laatst bewerkt:
Al gelukt.

Ik gebruikte "Private sub frmContacttoevoegen_initialize()" in plaats van "Private sub Userform_initialize()"
 
Omdat het niet
Code:
Private Sub frmContacttoevoegen_Initialize()
is, maar
Code:
Private Sub Userform_Initialize()

* edit: zag je laatste bericht niet...
 
Laatst bewerkt:
Dank je.

Valt me nog iets in waar ik geen antwoord op vindt:

Wat ik heb:
Op frmOnderwerpen wordt in cmbBedrijfsnaam een bedrijf gekozen.
In cmbContactpersoon wordt een contactpersoon gekozen.
Op sheet(Contactpersonen) ligt bij iedere contactpersoon het corresponderende bedrijf vast.

Wat ik wil:
In cmbContactpersoon enkel die contactpersonen weergeven die horen bij het in cmbBedrijfsnaam reeds geselecteerde bedrijf.

Hoe doe ik dit?
 
Ik heb nu de volgende code onder cmbContactpersoon:

Code:
Private Sub Userform_initialize()

    'voor elke variabele in tabblad bedrijven in de eerste kolom alle cellen met waardes
    For Each b In Sheets("Bedrijven").Columns(1).SpecialCells(2).Offset(1).SpecialCells(2)
        'groepeer alle variabele
       bedr = bedr & "|" & b.Value
    Next
    'de lijst van de combobox is een splitsing van de variabele in de groepering
    cmbBedrijfsnaam.List = Split(Mid(bedr, 2), "|")
    

Dim oRng As Range
    cmbContactpersoon.Value = ""
    Set oRng = ThisWorkbook.Sheets("Contactpersonen").Cells.Find(what:=cmbBedrijfsnaam.Value, lookat:=xlWhole)
      
VulComboBox2
  cmbContactpersoon.List = Sheets("Contactpersonen").Columns(27).SpecialCells(2).Offset(1).SpecialCells(2).Value
  cmbContactpersoon.Value = Sheets("Contactpersonen").Range("AA2")
    
End Sub

Sub VulComboBox2()
  With [Blad3!A1:A100] 'Laat alleen de gefilterde namen zien
    .Range("A1").AutoFilter Field:=1, Criteria1:=cmbBedrijfsnaam.Value
    .Offset(0, 1).SpecialCells(xlCellTypeVisible).Copy [Bedrijven!AA1]
    Sheets(3).ListObjects("Tabel1").Range.AutoFilter Field:=1
  End With
End Sub

Als deze code actief staat, dan opent het formulier "frmOnderwerpen" niet meer (opent wel als bovenstaande code verwijdert wordt) en krijg ik de melding "Object vereist" op de volgende code:

Code:
Private Sub cmdOnderwerp_Click()
   Unload Me
    frmOnderwerpen.Show
End Sub


Kan iemand hier a.u.b. naar kijken? Ik wil hier graag van leren :)
http://www.mijnbestand.nl/Bestand-WSUZLOZYFI34.xlsm
 
remcop1989,

Ik heb een regel code aangepast, die naar de legeregel zoekt.
Je kunt je bestandje gewoon hier plaatsen, zo groot is het niet.

Ik weet het niet zeker maar denk omdat je met Tabellen werkt, de code daarop ook aangepast moet worden.
Misschien dat er een VBA kenner hier naar kan kijken.

Verder zou ik het niet weten.
 

Bijlagen

Laatst bewerkt:
remcop1989,

Ik zal niet zeggen dat het nu voor een deel perfect werkt.
Kijk er eens naar.

Als je het Hoofdmenu voor je heb, klik dan op de knop "Onderwerpen" en zie dat dit werkt. ( volgens mij nog niet perfect)

Jammer dat er nog geen VBA Expert naar gekeken heeft.
 

Bijlagen

Zou iemand hier toch nog eens naar kunnen kijken?

Op tabblad Bedrijven worden alle bedrijven toegevoegd (middels de knop "Bedrijf toevoegen" op tabblad start. Hieraan staat frmBedrijftoevoegen gekoppeld)
Op tabblad Contactpersonen worden alle contactpersonen toegevoegd (middels de knop "Contactpersoon toevoegen" op tabblad start. Hieraan staat frmContactpersoontoevoegen gekoppeld) (bij ieder bedrijf kunnen dit dus meerdere personen zijn)
Op frmActiviteiten worden activiteiten bijgehouden per bedrijf en per contactpersoon

Op frmActiviteiten gebruik ik de volgende code om combobox cmbBedrijfsnaam en cmbContactpersoon te vullen (gedaan middels knop "activiteittoevoegen"):

Code:
Private Sub UserForm_Initialize()

    'voor elke variabele in tabblad bedrijven in de eerste kolom alle cellen met waardes
    For Each b In Sheets("Bedrijven").Columns(1).SpecialCells(2).Offset(1).SpecialCells(2)
        'groepeer alle variabele
        bedr = bedr & "|" & b.Value
    Next
    'de lijst van de combobox is een splitsing van de variabele in de groepering
    cmbBedrijfsnaam.List = Split(Mid(bedr, 2), "|")
    
    
    'voor elke variabele in tabblad bedrijven in de eerste kolom alle cellen met waardes
    For Each b In Sheets("Contactpersonen").Columns(2).SpecialCells(2).Offset(1).SpecialCells(2)
        'groepeer alle variabele
        cont = cont & "|" & b.Value
    Next
    'de lijst van de combobox is een splitsing van de variabele in de groepering
    cmbContactpersoon.List = Split(Mid(cont, 2), "|")
    
    'voor elke variabele in tabblad bedrijven in de eerste kolom alle cellen met waardes
    'For Each b In Sheets("Onderwerpen").Columns(3).SpecialCells(2).Offset(1).SpecialCells(2)
        'groepeer alle variabele
    '    ondr = ondr & "|" & b.Value
    'Next
    'de lijst van de combobox is een splitsing van de variabele in de groepering
    'cmbOnderwerp.List = Split(Mid(ondr, 2), "|")
    
    txtDatum.Value = Format(Date, "dd-mm-yyyy")
   
End Sub


Dit werkt prima. Hij toont netjes alle bedrijven en contactpersonen

Wat ik echter nog steeds probeer is dat op frmActiviteiten de combobox cmbContactpersoon alleen die contactpersonen toont die horen bij het bedrijf gekozen in cmbBedrijfsnaam. Op tabblad "contactpersonen" is netjes terug te vinden welke contactpersonen bij bijvoorbeeld bedrijf A en welke bij Bedrijf B horen.


Ondanks de goede hulp van Excelamateur heb ik nog geen oplossing gevonden.
Met de code gegeven in zijn voorbeeld kom ik er ook niet uit.

Wie helpt mij in de goede richting?
 

Bijlagen

Je wilt de contactpersonen laden van een bedrijf dus moet je eerst een bedrijf selecteren éér je de contactpersonen wilt zien.
Haal onderstaande uit 'Private Sub Userform_Initialize()'
Code:
For Each b In Sheets("Contactpersonen").Columns(2).SpecialCells(2).Offset(1).SpecialCells(2)
    cont = cont & "|" & b.Value
Next
cmbContactpersoon.List = Split(Mid(cont, 2), "|")
en plaats deze onder 'Private Sub cmbBedrijfsnaam_Change(). Wijzig de 2e regel naar
Code:
If b.Value = cmbBedrijfsnaam.Value Then cont = cont & "|" & b.Offset(, 1).Value
 

Bijlagen

Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan