Afhankelijk gedrag tussen keuzelijst met invoervak

Status
Niet open voor verdere reacties.

Karsten1985

Gebruiker
Lid geworden
29 mei 2012
Berichten
6
Ik ben in Excel bezig om een urenregistratie te maken.
Nu wil ik graag twee keuzelijsten met invoervak in het formulier plaatsen.
In lijst nr. 1 komen alle mogelijke grootboekrekeningen te staan (dit gebeurt nu via de Eigenschappen van het invoervak, waarbij ik in RowSource de naam van het bereik heb ingevuld).
Nu wil ik dat keuzelijst nr. 2 wordt gevuld met alle mogelijkheden behorende bij keuzelijst nr. 1
In Excel zelf lukt het wel, maar in het formulier niet.

Grootboek Naam Kostenplaats
Kosten van goodwill van derden ACTIVA1 goodwill1 goodwill2 goodwill3 goodwill4 goodwill5

machines en installaties ACTIVA2 machines1 machines2 machines3 machines4 machines5

technische en administratieve uitrusting ACTIVA3 uitrusting1 uitrusting2 uitrusting3 uitrusting4 uitrusting5

vorderingen op handelsdebiteuren ACTIVA4 debiteuren1 debiteuren2 debiteuren3 debiteuren4 debiteuren5

De naam van het bereik van bijvoorbeeld "goodwill1 t/m goodwill5" is ACTIVA1

Bedoeling is dus dat als in de invoerlijst 1 "vorderingen op handelsdebiteuren" wordt geselecteerd, men in invoerlijst 2 alleen nog maar kan kiezen uit "debiteuren1 t/m debiteuren 5".

Ik hoop dat het zo duidelijk is, anders kijk ik wel of ik een voorbeeld kan plaatsen.

Joost
 
Laatst bewerkt:
voorbeeld excel.png

Ik zie dat het voorbeeld hierboven er niet goed uitziet.
Ik hoop dat dit plaatje makkelijker is.
 
Probeer eens.
Code:
Private Sub ComboBox1_Change()
 Dim c As Range
   ComboBox2.Clear
  With Sheets("Blad1").Range("H4:H7")
   Set c = .Find(ComboBox1, , xlValues, xlWhole)
    ComboBox2.List = Application.Transpose(c.Offset(, 2).Resize(, 5).Value)
 End With
End Sub
 
HSV,

Bedankt voor de oplossing.
Het werkt perfect.
Ik zal deze week nog even kijken naar jouw oplossing.
En ik zal de oplossing van SNB ook bekijken.
Ben erg benieuwd wat er precies gebeurt.
 
Ik kom bij nader inzien nog twee problemen tegen.

Ten eerste als ik combobox 1 leeg wil maken, of iets in wil voeren dat niet voorkomt in de lijst, dan krijg ik een foutmelding in de code van combobox 2.

Ten tweede wil ik het bereik graag flexibel maken. (er staat nu bijvoorbeeld overal nummer 1 t/m 5, maar dat kan variëren dus minimaal 1 en maximaal 5, als ik er nu eentje weg haal dan komt er een 0 te staan in de lijst).

Iemand hier een oplossing voor?
 
Code:
Private Sub ComboBox1_Change()
Dim c As Range, sq
 ComboBox2.Clear
  With Sheets("Blad1").Range("H4:H" & Cells(Rows.Count, 8).End(xlUp).Row)
   Set c = .Find(ComboBox1, , xlValues, xlWhole)
    If Not c Is Nothing Then
     ComboBox2.List = Application.Transpose(c.Offset(, 2).Resize(, Cells(c.Row, Columns.Count).End(xlToLeft).Column - 9).Value)
    End If
 End With
End Sub
 
Ik krijg met deze code een foutmelding als ik iets probeer te selecteren in combobox1.

Fout 1004 tijdens uitvoering:
Door de toepassing of door object gedefinieerde fout.

Als ik dan klik op foutopsporing dan wordt de volgende regel gemarkeerd.

ComboBox2.List = Application.Transpose(c.Offset(, 2).Resize(, Cells(c.Row, Columns.Count).End(xlToLeft).Column - 9).Value)
 
Doe er eens een bestandje bij.
Je gegevens zullen wel ergens anders staan dan in je bijlage.
 
voorbeeld excel eerste lege cel zoeken.jpg

HSV,

Ik ben er nu achter dat het probleem zit in het zoeken naar de eerste lege cel als er nog helemaal niets is ingevuld.
De afbeelding laat een voorbeeld zien van de layout van het werkblad zien waarin de eerste lege cel hoort te worden gevonden.
Het tellen hoort dus pas te beginnen vanaf rij 15 ongeveer.
Als er nu helemaal niks in de lijst staat dan komt de fout, omdat ik de cel "relatie" in het formulier wil vullen.
Dat doe ik met deze code:

Private Sub UserForm_Initialize()

Dim KlantNr As Range
Dim cKlantNr As Range
Dim Klant As Worksheet
Set Klant = Worksheets("RELATIE")
Set KlantNr = Klant.Range("KlantNr")

'standaard instructie om een keuzelijst te vullen, in dit geval met het klantnummer en naam
For Each cKlantNr In KlantNr
With Me.Relatie
.AddItem CDec(cKlantNr.Value)
'voor de leesbaarheid van de keuzelijst wordt een tweede kolom in de lijst opgenomen met daarin de naam van de klant
.List(.ListCount - 1, 1) = cKlantNr.Offset(0, 1).Value
End With
Next cKlantNr

Me.Relatie.SetFocus

End Sub

Waarschijnlijk moet ik in deze code iets aanpassen en is de fout dan weg.
Want zodra ik één relatie heb ingevoerd geeft hij de fout niet meer aan.

Joost
 
Joost

Als je VBA code plaatst: svp tussen code tags.
Wil je hulp, plaats dan een voorbeeld Excel bestand: geen plaatje !!!

vullen van een listbox/combobox doe je bij voorkeur met gebruik van de eigenschap list:

Code:
Combobox1.list=range("A1:B12").value
Dan kun je tegelijkertijd meer kolommen laden.

Wil je het dynamisch, gebruik dan bijvoorbeeld

Code:
Combobox1.List=range("C11").currentregion.value

Het gebruik van 'Setfocus' is zelden tot nooit nodig
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan