• 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.

array probleem en berekening

Status
Niet open voor verdere reacties.

glda19

Terugkerende gebruiker
Lid geworden
14 jan 2008
Berichten
1.068
Heb op het lint een dropbox toegevoegd die gevoed word met volgende array
averlofcodesvoluit = Array("Kies uit lijst", "Kredietdag", "Kredietdag voormiddag", "Kredietdag namiddag", "Collectief verlof", "Collectief verlof voormiddag", "Collectief verlof namiddag", _
"Verlof", "Verlof voormiddag", "Verlof namiddag", "Ziek", "Ziek geworden op werk voormiddag", "Ziek geworden op werk namiddag", "Sociale promotie", "Gelegenheidsverlof", "Gelegenheidsverlof voormiddag", "Gelegenheidsverlof namiddag", _
"Dienstvrijstelling", "Dienstvrijstelling voormiddag", "Dienstvrijstelling namiddag", "Zending", "Zending voormiddag", "Zending namiddag", "Werkongeval", "Staking", _
"Verlof vorig jaar", "Verlof vorig jaar voormiddag", "Verlof vorig jaar namiddag", "Onbetaald verlof", "4/5")

Onderstaande haalt het geselecteerde uit de dropbox wat 100% werkt.
averlofcodesvoluit(ddIndex)

wat ik zou willen is het volgende telkens het word voormiddag of namiddag voorkomt moet de waarde met 0,5 verhogen en staat voormiddag of namiddag er niet dan de waarde met 1 verhogen
en ziek geworden op het werk voormiddag of na middag teller met 1 verhogen

Heb nu iets maar de code word veel te ingewikkeld.
 
heb ondertussen zelf de code vereenvoudigd.
Een deel van de code van hoe ik het deed
En had veel te veel woorden waarop ik moest controleren of ze voor kwamen
De nieuwe code is gebaseerd op de oude code maar een stuk éénvoudiger minder controles

Een deel van de code van hoe ik het deed
Code:
ArryWrdverlofcode() = Split(UCase(averlofcodesvoluit(ddIndex)))
IntWrdArryLengte = UBound(ArryWrdverlofcode) - LBound(ArryWrdverlofcode) + 1

If IntWrdArryLengte = 2 Or IntWrdArryLengte = 3 Or IntWrdArryLengte = 4 Then
    StrTweedewrdArray = UCase(ArryWrdverlofcode(1))
End If

nieuwe code
Zit nog 1 probleem in dat bij ziek geworden op het werk voormiddag of namiddag voormiddag en naamdig voor komt en hij dan maar een halve dag telt in plaats van een een volledige dag 1 dus
Code:
For Each shp In ActiveSheet.Shapes
    If Not (shp.Type = 12 Or shp.Type = 13 Or shp.Type = 8) Then
        If UCase(shp.TextFrame.Characters.text) = UCase(averlofcodesvoluit(ddIndex)) And InStr(1, averlofcodesvoluit(ddIndex), "voormiddag", 1) Then
            DblVerlofCodeTeller = DblVerlofCodeTeller + 0.5
            
        ElseIf UCase(shp.TextFrame.Characters.text) = UCase(averlofcodesvoluit(ddIndex)) And InStr(1, averlofcodesvoluit(ddIndex), "namiddag") Then
            DblVerlofCodeTeller = DblVerlofCodeTeller + 0.5
            
        ElseIf UCase(shp.TextFrame.Characters.text) = UCase(averlofcodesvoluit(ddIndex)) Or _
        UCase(shp.TextFrame.Characters.text) = UCase(averlofcodesvoluit(ddIndex)) And InStr(1, averlofcodesvoluit(ddIndex), "werk") Then
          DblVerlofCodeTeller = DblVerlofCodeTeller + 1
        End If
        
    End If
Next
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan