• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

zou ik deze select case kunnen verkleinen

Status
Niet open voor verdere reacties.

glda19

Terugkerende gebruiker
Lid geworden
14 jan 2008
Berichten
1.064
Hi

Zie hier een deel uit de select case
Ik zou deze graag proberen verkleinen.
Er zijn eigenlijk maar 3 zaken die eigen steeds verschillen
1ste de naam van de afwezigheidscode
2de ik leg een vorm op datum van de kalender en die is ver type afwezigheidscode verschillende
3de de plaats waar de op het datablad waar het aantal bewaard word.

Wat ik wel al wee is dat
Case" kreditdag","verlofdag" zo kunnen samen zetten maar wat dan met de kleur die de vorm moet krijgen en de rij waar het aantal moet bewaard worden op het datablad

Zou ik een 3 array's kunnen gebruiken
1 met alle namen van de afwezigheden in.
2 Met het kleur adress
3 de met de rij op het datablad waar het aantal gekomen afwezigheid moet worden opgeslagen.

En da door loop ik de eerste array om op te zoeken op welke plaats de gekozen afwezigheidscode staat en zo de juiste plaat van de kleur code en rij op het datablad op te zoeken.
En dan de array gebruiken in de select case.
Want is nu een select case waar zeker meer dan 5 x de zelfde code terug komt.

Code:
Select Case StrVerLofCodeKeuze
       
    Case "Kredietdag"           'Kredietdag (KD)
          
        Set KleurcodeAdres = ActiveSheet.Range("T13")
        DblAantalPerAfwezigheidsCode = ActiveSheet.Application.WorksheetFunction.Sum(Range("AB5:AB6").Value)
        StrSoortSymboolDagdeel = "Rechthoek"
        IntAantalCellenInBereik = RngVerlofBereik.Cells.Count ' Telt het aantal cellen in het geselecteerde bereik
        
        ' Nakijken of je geen dagen te veel hebt geselecteerd.
        DblTeveelDagenAfwezigheid = TellenAantalAfwezigheidscodes(DblAantalPerAfwezigheidsCode, IntAantalCellenInBereik, StrVerLofCodeKeuze)
        If DblTeveelDagenAfwezigheid < 0 Then Exit Sub
        
        ' Tekenen van de juiste vorm
        ' Nieuwe aantal Afwezigheidscode wegschrijven op het datablad op de overeenkomstige rij
        Call TekenenSymboolVerlof(RngVerlofBereik, StrSoortSymboolDagdeel, StrVerLofCodeKeuze, KleurcodeAdres)
        Worksheets("Datablad").Range("c24").Value = DblAantalafwezigheidsCodeGenomen + IntAantalCellenInBereik
          
    Case "Kredietdag voormiddag"    'Kredietdag voormiddag (KD VM)
        
        Set KleurcodeAdres = ActiveSheet.Range("T13")
        DblAantalPerAfwezigheidsCode = ActiveSheet.Application.WorksheetFunction.Sum(Range("ab5:AB6").Value)
        StrSoortSymboolDagdeel = "Driehoek VM"
        IntAantalCellenInBereik = RngVerlofBereik.Cells.Count ' Telt het aantal cellen in het geselecteerde bereik
        
        ' Nakijken of je geen dagen te veel hebt geselecteerd.
         DblTeveelDagenAfwezigheid = TellenAantalAfwezigheidscodes(DblAantalPerAfwezigheidsCode, IntAantalCellenInBereik, StrVerLofCodeKeuze)
        If DblTeveelDagenAfwezigheid < 0 Then Exit Sub
    
        ' Tekenen van de juiste vorm
        ' Nieuwe aantal Afwezigheidscode wegschrijven op het datablad op de overeenkomstige rij
        
        Call TekenenSymboolVerlof(RngVerlofBereik, StrSoortSymboolDagdeel, StrVerLofCodeKeuze, KleurcodeAdres)
        Worksheets("Datablad").Range("c25").Value = DblAantalafwezigheidsCodeGenomen + IntAantalCellenInBereik / 2
       
    Case "Kredietdag namiddag"    'Kredietdag namiddag (KD NM)
        
        Set KleurcodeAdres = ActiveSheet.Range("T13")
        DblAantalPerAfwezigheidsCode = ActiveSheet.Application.WorksheetFunction.Sum(Range("ab5:ab6").Value)
        StrSoortSymboolDagdeel = "Driehoek NM"
        IntAantalCellenInBereik = RngVerlofBereik.Cells.Count ' Telt het aantal cellen in het geselecteerde bereik
        
        ' Nakijken of je geen dagen te veel hebt geselecteerd.
        DblTeveelDagenAfwezigheid = TellenAantalAfwezigheidscodes(DblAantalPerAfwezigheidsCode, IntAantalCellenInBereik, StrVerLofCodeKeuze)
        If DblTeveelDagenAfwezigheid < 0 Then Exit Sub
        
        ' Tekenen van de juiste vorm
        ' Nieuwe aantal Afwezigheidscode wegschrijven op het datablad op de overeenkomstige rij Call TekenenSymboolVerlof(RngVerlofBereik, StrSoortSymboolDagdeel, StrVerLofCodeKeuze, KleurcodeAdres)
        Call TekenenSymboolVerlof(RngVerlofBereik, StrSoortSymboolDagdeel, StrVerLofCodeKeuze, KleurcodeAdres)
        Worksheets("Datablad").Range("c26").Value = DblAantalafwezigheidsCodeGenomen + IntAantalCellenInBereik / 2

    Case "Compensatie onregelematige cyclus" 'Compensatie onregelematige cyclus CX

        Set KleurcodeAdres = ActiveSheet.Range("T14")
        DblAantalPerAfwezigheidsCode = ActiveSheet.Range("z7").Value
        StrSoortSymboolDagdeel = "Rechthoek"
        IntAantalCellenInBereik = RngVerlofBereik.Cells.Count ' Telt het aantal cellen in het geselecteerde bereik
        
        ' Nakijken of je geen dagen te veel hebt geselecteerd.
        DblTeveelDagenAfwezigheid = TellenAantalAfwezigheidscodes(DblAantalPerAfwezigheidsCode, IntAantalCellenInBereik, StrVerLofCodeKeuze)
        If DblTeveelDagenAfwezigheid < 0 Then Exit Sub
        ' Tekenen van de juiste vorm
        ' Nieuwe aantal Afwezigheidscode wegschrijven op het datablad op de overeenkomstige rij
          
        Call TekenenSymboolVerlof(RngVerlofBereik, StrSoortSymboolDagdeel, StrVerLofCodeKeuze, KleurcodeAdres)
        Worksheets("Datablad").Range("c27").Value = DblAantalafwezigheidsCodeGenomen + IntAantalCellenInBereik
        
    Case "Compensatie onregelematige cyclus voormiddag"    'Compensatie onregelematige cyclus voormiddag (Cx VM)

        Set KleurcodeAdres = ActiveSheet.Range("T14")
        DblAantalPerAfwezigheidsCode = ActiveSheet.Range("ab7").Value
        StrSoortSymboolDagdeel = "Driehoek VM"
        IntAantalCellenInBereik = RngVerlofBereik.Cells.Count ' Telt het aantal cellen in het geselecteerde bereik
        
        ' Nakijken of je geen dagen te veel hebt geselecteerd.
        DblTeveelDagenAfwezigheid = TellenAantalAfwezigheidscodes(DblAantalPerAfwezigheidsCode, IntAantalCellenInBereik, StrVerLofCodeKeuze)
        If DblTeveelDagenAfwezigheid < 0 Then Exit Sub
        ' Tekenen van de juiste vorm
        ' Nieuwe aantal Afwezigheidscode wegschrijven op het datablad op de overeenkomstige rij
        Call TekenenSymboolVerlof(RngVerlofBereik, StrSoortSymboolDagdeel, StrVerLofCodeKeuze, KleurcodeAdres)
        Worksheets("Datablad").Range("c28").Value = DblAantalafwezigheidsCodeGenomen + IntAantalCellenInBereik / 2


    Case "Compensatie onregelematige cyclus namiddag"    'Compensatie onregelematige cyclus namiddag (Cx NM)
                
            Set KleurcodeAdres = ActiveSheet.Range("T14")
        DblAantalPerAfwezigheidsCode = ActiveSheet.Range("z7").Value
        
        StrSoortSymboolDagdeel = "Driehoek NM"
        IntAantalCellenInBereik = RngVerlofBereik.Cells.Count ' Telt het aantal cellen in het geselecteerde bereik
        
        ' Nakijken of je geen dagen te veel hebt geselecteerd.
        DblTeveelDagenAfwezigheid = TellenAantalAfwezigheidscodes(DblAantalPerAfwezigheidsCode, IntAantalCellenInBereik, StrVerLofCodeKeuze)
        If DblTeveelDagenAfwezigheid < 0 Then Exit Sub ' Tekenen van de juiste vorm
        
        ' Nieuwe aantal Afwezigheidscode wegschrijven op het datablad op de overeenkomstige rij
        Call TekenenSymboolVerlof(RngVerlofBereik, StrSoortSymboolDagdeel, StrVerLofCodeKeuze, KleurcodeAdres)
        Worksheets("Datablad").Range("c29").Value = DblAantalafwezigheidsCodeGenomen + IntAantalCellenInBereik / 2
    
    Case "Verlofdag"   'verlofdag (v)

        Set KleurcodeAdres = ActiveSheet.Range("T15")
        DblAantalPerAfwezigheidsCode = ActiveSheet.Range("ab3").Value
        StrSoortSymboolDagdeel = "Rechthoek"
        IntAantalCellenInBereik = RngVerlofBereik.Cells.Count ' Telt het aantal cellen in het geselecteerde bereik
        
        ' Nakijken of je geen dagen te veel hebt geselecteerd.
        DblTeveelDagenAfwezigheid = TellenAantalAfwezigheidscodes(DblAantalPerAfwezigheidsCode, IntAantalCellenInBereik, StrVerLofCodeKeuze)
        If DblTeveelDagenAfwezigheid < 0 Then Exit Sub
        
        ' Tekenen van de juiste vorm
        ' Nieuwe aantal Afwezigheidscode wegschrijven op het datablad op de overeenkomstige rij
        Call TekenenSymboolVerlof(RngVerlofBereik, StrSoortSymboolDagdeel, StrVerLofCodeKeuze, KleurcodeAdres)
        
        Worksheets("Datablad").Range("c30").Value = DblAantalafwezigheidsCodeGenomen + IntAantalCellenInBereik
       
    Case "Verlof voormiddag"     'verlof voormiddag (v VM)
 
Laatst bewerkt:
Dat kun je zelf uiteraard al een heel groot deel zelf doen; je wéét immers welke delen herhalend zijn voor elke Case (die kun je er dus probleemloos uithalen) en welke variëren (de drie zaken die je opnoemt). Die laatste drie blijven dus staan in de Case variabelen, de rest zet je ofwel erboven, ofwel er onder.
 
Het probleem is dat per afwezigheidscode een betaalde kleur word toe gepast. Dus voor een dag, voormiddag, namiddag. zelfde voor de rij waar het aantal genomen dagen moet worden bewaard

Stel dat ik kreditdag,verlof in in case zet hoe dan met de kleurcode en het rijnr op het datablad.
@ OctaFish
Wat bedoel je met :
Die laatste drie blijven dus staan in de Case variabelen, de rest zet je ofwel erboven, ofwel er onder.
 
Herhalende codes, die dus voor elke case hetzelfde zijn, hoef je niet in de select case op te nemen. Maar ik heb al gezien dat je wel degelijk varieert per case, dus dan wordt dat al een stuk lastiger. Al zou je met meerdere select cases kunnen werken, die korter zijn en waarin je de variabelen eerst combineert. En lege regels helpen uiteraard ook niet voor lengte van de code en/of overzicht. En dat geldt ook voor de superlange variabelen namen die je gebruikt. Daar zou ik persoonlijk gek van worden, van aan de drank raken of allebei. (dat laatste dus ;))
 
Ik denk het zo te doen.
Een array met de afwezigheidscodes, arry met de adressen cellen waarin de kleurcode, en een array met denk nog een array met het aantal dagen percode
 
Voorbeeldje van samenvoegen:
Code:
Select Case StrVerLofCodeKeuze
    Case "Kredietdag", "Kredietdag voormiddag", "Kredietdag namiddag"
        Set KleurcodeAdres = ActiveSheet.Range("T13")
    Case "Compensatie onregelematige cyclus", "Compensatie onregelematige cyclus voormiddag", "Compensatie onregelematige cyclus namiddag"
        Set KleurcodeAdres = ActiveSheet.Range("T14")
    Case "Verlofdag"
        Set KleurcodeAdres = ActiveSheet.Range("T15")
End Select

En een regel die je uit de Select kan halen en onderaan als laatste zetten:
Code:
        Call TekenenSymboolVerlof(RngVerlofBereik, StrSoortSymboolDagdeel, StrVerLofCodeKeuze, KleurcodeAdres)

En het gebruik van CALL is zó jaren 80: wordt echt al jaren niet meer gebruikt :)

Code:
        TekenenSymboolVerlof RngVerlofBereik, StrSoortSymboolDagdeel, StrVerLofCodeKeuze, KleurcodeAdres
 
Hoe ga je de afwezigheidscodes tellen en zorgen dat ze op de juiste plaats op het blad komen te staan en op de juiste rij in het datablad.
Dus deze van het tekenen zou je na de end select zetten?

Hoe kan ik een arry van strings maken.
Ik vind enkel dit dim arrytest() as variant
En waarom niet dit voor een string

Dim arryTestes() string
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan