Case vraag

Status
Niet open voor verdere reacties.

Plotinus

Gebruiker
Lid geworden
25 mrt 2007
Berichten
649
Ik wil door middel van een case-constructie bepaalde opdrachten toewijzen aan bepaalde personen. Het gaat hier om opdrachten die voor kunnen komen in alle gemeenten in Noord- en Zuid-Holland. In Noord-Holland doet de ene groep mensen de betreffende werkzaamheden, in Zuid-Holland de andere vaste groep. Bij andere werkzaamheden is het precies andersom. Hieronder zie je hoe ik dit voor een paar gemeentes heb gerealiseerd:
Code:
 Case "Bouwvergunning"
                    Select Case Range("I" & ActiveCell.Row)
                        Case "Amsterdam": .List = Array("Jan", "Piet", "Irma", "Margriet")
                        Case "Hoorn": .List = Array("Jan", "Piet", "Irma", "Margriet")
                        Case "Alkmaar": .List = Array("Jan", "Piet", "Irma", "Margriet")
                        Case "Heiloo": .List = Array("Jan", "Piet", "Irma", "Margriet")
                        Case "Castricum": .List = Array("Jan", "Piet", "Irma", "Margriet")
                        Case "Rotterdam": .List = Array("Bert", "Truus", "Joop", "José")
                        Case "Vlaardingen": .List = Array("Bert", "Truus", "Joop", "José")
                        Case "Schiedam": .List = Array("Bert", "Truus", "Joop", "José")
                        Case "Den Haag": .List = Array("Bert", "Truus", "Joop", "José")
                        Case "Delft": .List = Array("Bert", "Truus", "Joop", "José")
                        Case "Gouda": .List = Array("Bert", "Truus", "Joop", "José")
                    End Select
                Case "Bouwtoezicht"
                     Select Case Range("I" & ActiveCell.Row)
                       Case "Amsterdam": .List = Array("Bert", "Truus", "Joop", "José")
                        Case "Hoorn": .List = Array("Bert", "Truus", "Joop", "José")
                        Case "Alkmaar": .List = Array("Bert", "Truus", "Joop", "José")
                        Case "Heiloo": .List = Array("Bert", "Truus", "Joop", "José")
                        Case "Castricum": .List = Array("Bert", "Truus", "Joop", "José")
                        Case "Rotterdam": .List = Array("Jan", "Piet", "Irma", "Margriet")
                        Case "Vlaardingen": .List = Array("Jan", "Piet", "Irma", "Margriet")
                        Case "Schiedam": .List = Array("Jan", "Piet", "Irma", "Margriet")
                        Case "Den Haag": .List = Array("Jan", "Piet", "Irma", "Margriet")
                        Case "Delft": .List = Array("Jan", "Piet", "Irma", "Margriet")
                        Case "Gouda": .List = Array("Jan", "Piet", "Irma", "Margriet")
                    End Select

Ik vraag me nu af, of dit niet slimmer kan. Ga ik dit namelijk voor alle gemeentes uitwerken, dan wordt het wel een erg lange case-constructie. Is het misschien mogelijk om alle gemeentes van de verschillende provincies in verschillende variabele te tanken (bijvoorbeeld varNH, varZH) en naar de inhoud van die variabele te verwijzen, bijvoorbeeld door: Case varNH:.List = Array("Bert", "Truus", "Joop", "José")? Mij lukt het niet. Iemand een idee?
 

Bijlagen

  • Case vraagje.zip
    39,4 KB · Weergaven: 28
Het kan in ieder geval een stuk makkelijker:
Code:
        With ComboBox1
            Select Case Range("J" & ActiveCell.Row)
                Case "Bouwvergunning"
                    Select Case Range("I" & ActiveCell.Row)
                        Case "Amsterdam", "Hoorn", "Alkmaar", "Heiloo", "Castricum"
                            .List = Array("Jan", "Piet", "Irma", "Margriet")
                         Case "Rotterdam", "Vlaardingen", "Schiedam", "Den Haag", "Delft", "Gouda"
                            .List = Array("Bert", "Truus", "Joop", "José")
                    End Select
                Case "Bouwtoezicht"
                    Case "Amsterdam", "Hoorn", "Alkmaar", "Heiloo", "Castricum"
                        .List = Array("Jan", "Piet", "Irma", "Margriet")
                    Case "Rotterdam", "Vlaardingen", "Schiedam", "Den Haag", "Delft", "Gouda"
                        .List = Array("Bert", "Truus", "Joop", "José")
                End Select
            End Select
        End With
 
Als in kolom K de afkorting van de provincie (Zh of NH) komt te staan is dit voldoende

Code:
Sub M_snb()
    sn = Split("Jan Piet Irma Margriet")
    sp = Split("Bert Truus Joop José")
    st = Range("I" & ActiveCell.Row).Resize(, 3)
    
    Select Case st(1, 2)
    Case "Bouwvergunning"
      combobox1.List = IIf(st(1, 3) = "ZH", sn, sp)
    Case "Bouwtoezicht"
       combobox1.List = IIf(st(1, 3) = "ZH", sp, sn)
    End Select
End Sub
 
bedankt OctaFish en snb het is gelukt door jullie suggesties te combineren.
 
Dat lijkt me stug.
Beide suggesties zijn afzonderlijk nl. voldoende.
 
Laatst bewerkt:
Toch wel:

Code:
Sub ComboBox1_drop()
    Groepeen = Split("Jan Piet Irma Margriet")
    Groeptwee = Split("Bert Truus Joop José")
    Application.ScreenUpdating = False
    With Range("J" & ActiveCell.Row)
        With ComboBox1
            Select Case Range("J" & ActiveCell.Row)
                Case "Bouwvergunning"
                    Select Case Range("I" & ActiveCell.Row)
                        Case "Amsterdam", "Hoorn", "Alkmaar", "Heiloo", "Castricum": .List = Groepeen
                        Case "Rotterdam", "Vlaardingen", "Schiedam", "Den Haag", "Delft", "Gouda": .List = Groeptwee
                    End Select
                Case "Bouwtoezicht"
                     Select Case Range("I" & ActiveCell.Row)
                        Case "Amsterdam", "Hoorn", "Alkmaar", "Heiloo", "Castricum": .List = Groeptwee
                        Case "Rotterdam", "Vlaardingen", "Schiedam", "Den Haag", "Delft", "Gouda": .List = Groepeen
                    End Select
            End Select
        End With
    End With
End Sub

Het voorbeeld was namelijk te eenvoudig: het is niet Noord- en Zuid-Holland; het gaat om een groep steden die de ene groep oppakt en een groep steden die de andere groep oppakt en die ik dus apart moet benoemen. Het liefst heb ik natuurlijk de groep steden ook geclusterd in een naampje/variabele.
 
Als je de ene groep aanduidt met A (achter iedere plaatsnaam in het werkblad) en de andere met B ben je klaar.
Vermijd onnodige verwijzingen naar het werkblad, die vertragen nl..
 
Laatst bewerkt:
Nee, dat is min mijn situatie niet juist. Afhankelijk van de werklast moet iemand uit een bepaalde groep een klus worden toegewezen afhankelijk van de stad waar deze plaatsvindt. Dus daarom dat ik een lijstje in een combox wil hebben van mogelijke uitvoerders, zodat er gekozen kan worden.
 
Zelf zou ik dit soort stamgegevens in een apart werkblad zetten. Bij elke wijziging moet je nu de code aanpassen. Zonder de opbouw van het bestand te zien zal dit waarschijnlijk ook werken. Het splitsen van gegevens obv een spatie is een beetje risicovol. Je zal maar een 'Jan Jaap' in dienst hebben.

Een beetje analoog aan de code in #3
Code:
Sub ComboBox1_drop()
    groepeen = Split("Jan Piet Irma Margriet")
    groeptwee = Split("Bert Truus Joop José")
    ar1 = Split("Amsterdam, Hoorn, Alkmaar, Heiloo, Castricum", ",")
    ar2 = Split("Rotterdam, Vlaardingen, Schiedam, DenHaag, Delft, Gouda", ",")
    ar3 = Range("I" & ActiveCell.Row).Resize(, 2)
    
    Select Case ar3(1, 2)
      Case "Bouwvergunning": ComboBox1.List = IIf(IsNumeric(Application.Match(ar3(1, 1), ar1, 0)), groepeen, groeptwee)
      Case "Bouwtoezicht": ComboBox1.List = IIf(IsNumeric(Application.Match(ar3(1, 1), ar2, 0)), groeptwee, groepeen)
    End Select
End Sub
 
Bedankt VenA, dit is precies wat ik nodig heb: kort, krachtig en snel.
OctaFIsh en snb ook bedankt; ik ben ook met jullie hulp weer een stukje wijzer geworden.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan