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

Gegevens vanaf een invulblad naar de juiste tabbladen 'sturen'

Status
Niet open voor verdere reacties.

fun_surfer

Gebruiker
Lid geworden
25 aug 2001
Berichten
621
Hallo allemaal, ik ben bezig met een urenverantwoording die door enkele werknemers ingevuld moet gaan worden (tot nu toe max 6). Nu wil ik op het invulblad de exacte activiteit, aangegeven d.m.v. een code, de uren invullen en die verdelen naar de werknemer (ieder zijn eigen tabblad). Ook wil ik dat de gegevens naar de juiste datum gaan op het tabblad van de werknemer, mits de aangegeven datum nog niet is ingevuld. Kortom:
1. de gegevens gaan naar de juiste werknemer;
2. op het tabblad van de werknemer gaan de gegevens naar de juiste datum, mits die datum nog niet is ingevuld.

Verder nog een hele simpele vraag waar ik ook maar niet uitkom: hoe zorg ik dat de maand in cel A1 (werknemersbladen) in hoofdletters wordt weergegeven?
GRTZ fun_surfer.
 

Bijlagen

Laatst bewerkt:
Verder nog een hele simpele vraag waar ik ook maar niet uitkom: hoe zorg ik dat de maand in cel A1 (werknemersbladen) in hoofdletters wordt weergegeven?

Zo simpel is dat niet hoor.

Je kan dit gebruiken

=HOOFDLETTERS(TEKST(VANDAAG();"mmmm"))

maar dan kan je er niet meer mee rekenen in de cellen eronder. Dan zul je voor die cellen moeten verwijzen naar een andere cel.

Wigi
 
Laatst bewerkt:
Wigi, bedankt voor je antwoord. Ik had eigenlijk gedacht dat er een antwoord in macro zou komen, daar is mij bijzonder weinig over bekend, maar velen van jullie schudden zoiets ogenschijnlijk zo uit de mouw...
Ik heb nu het volgende toegepast:
=ALS(A2="";"";HOOFDLETTERS(TEKST(A2;"mmmm")))
Zoals je al schreef kan er niet meer mee gerekend worden dus moest ik als 'rekencel' maar een andere nemen.
TNX, Art.
 
Hallo allemaal, ik heb een begin gemaakt met de macrorecorder, nl. het kopiëren van de data. Blijven er 3 vragen over:
1. hoe maak ik het werkblad waar ik het heen stuur variabel, gekoppeld aan range D1:G1;
2. hoe zorg ik dat de gegevens achter de datum komen die in range D3:F3 staat;
3. hoe voeg ik hier een controle aan toe die kijkt of er geen data wordt overschreven?
 

Bijlagen

Hallo allemaal, ik heb mijn opzet opgesteld aan de hand van een verkeerde interpretatie. Ik heb nu de juiste opzet bedacht, ik loop alleen nog steeds tegen het feit aan dat ik de gegevens niet naar een variabel werkblad kan sturen. Ik heb wat geprobeerd met iets als lstWerknemer, maar dat deed ik nogal fout... Heeft er iemand nog een duwtje in de richting? Bijgaand mijn nieuwe opzet maar achter de knop 'gegevens verwerken' zit nog niets.
 

Bijlagen

Ik begrijp nog niet echt wat de bedoeling is.

Vooraleer dat je dat beter uitlegt, haal eens eerst de grove borstel door de code.

Dit bv.

Code:
Sheets("invulblad").Select
    Range("M13").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("werknemer 1").Select
    Range("J14").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

kan veel beter gedaan worden als:

Code:
Sheets("invulblad").Range("M13").Copy
Sheets("werknemer 1").Range("J14").PasteSpecial xlValues

Vermijd dus al die .Select

Wigi
 
Laatst bewerkt:
Ik heb het bestand aangepast en je vragen daarin verwerkt.

In 1 van je vorige berichten schreef je dit:
1. hoe maak ik het werkblad waar ik het heen stuur variabel, gekoppeld aan range D1:G1;
2. hoe zorg ik dat de gegevens achter de datum komen die in range D3:F3 staat;
3. hoe voeg ik hier een controle aan toe die kijkt of er geen data wordt overschreven?
Ad 1, 2 en 3:
Via onderstaande code:
Code:
    With Worksheets(Trim$(Range("D1"))).Range("A:A")
        Set Dag = .Find(Day(Worksheets("invulblad").Range("A5")), lookat:=xlPart, LookIn:=xlValues)
    End With
    If Not Dag Is Nothing Then
[COLOR="Blue"]        If Worksheets(Trim$(Range("D1"))).Range("[COLOR="Red"][B]B[/B][/COLOR]" & Dag.Row) = "" Then
            Worksheets(Trim$(Range("D1"))).Range("[COLOR="red"][B]B[/B][/COLOR]" & Dag.Row) = Worksheets("invulblad").Range("[COLOR="red"][B]K1[/B][/COLOR]")
        End If[/COLOR]    

--->

End If
De 1e regel geeft aan waar gezocht moet worden. Dat is dus de A-kolom van het werkblad dat je in D1 van het invulblad heeft ingevuld. (zijn we er nog :D ) Oftewel staat er in cel D1 "werknemer 2", dan zoekt de computer in tabblad werknemer 2.
Regel 2. Waar zoekt de computer naar? De computer zoekt naar de dag van cel A5 (invulblad). Aangezien niet elk werknemerswerkblad hetzelfde is, kan dat dus steeds op een andere rij zijn.
Regel 5 controleert of de gevonden cel leeg is of niet.
Is de cel leeg dan wordt het kenteken (via regel 6) in die cel geplaatst.

Opmerkingen:
- Om de code uit te breiden kan je de regels in de lege regel plaatsen tussen beide end if's. Zie pijl.
- Voor het uitbreiden van je code hoef je alleen de blauwe regels te kopiëren !
- De enige waardes die je hoef te veranderen zijn de celverwijzingen (in het rood)

In tegenstelling tot eerdere berichten kan je wel rekenen met de maand in cel A1 van de werknemerstabbladen. Namelijk via Datumwaarde.

Voorbeeld:
Cel A1 = "maart"
=Datumwaarde(1 & A1 & Jaar(Nu()))

Het resultaat is 1 maart 2007 als datum en niet als tekst.

Omdat ik toch bezig was, heb ik voor de volledigheid ook even je formule in de M-kolom aangepast. Of liever gezegd ingekort.

Met vriendelijke groet,


Roncancio
 
Laatst bewerkt:
Beste Wigi, bedankt voor je tip, ik heb die codes opgenomen met de macrorecorder en wist niet dat ik hier zo gemakkelijk in kon veranderen; weer wat geleerd! Ik kan me moeilijk verwoorden in mijn uitleg wat ik precies moet bijhouden maar de opzet zoals Roncancio heeft voorgesteld is exact wat ik bedoel; misschien wordt e.e.a. je duidelijk als je mijn huidige versie bekijkt. In ieder geval alweer heel erg bedankt voor al je input.
Roncancio, geweldig, heel erg bedankt voor je bestandje! Het enige dat ik nog niet geheel begrijp is de functie 'trim'. Ook in de help kon ik er niets over terug vinden en als ik naar diverse topics met trim als zoekwoord kijk kom ik tot de conclusie dat trim meerdere functies heeft, klopt dit? De rest van je code denk ik te begrijpen en bijgaand het vernieuwde bestand. Je hebt gelijk met de datum, ik heb het toch zou gehouden: nu vul ik de 1e van de maand in (i.p.v. de naam van de maand) en de rest gaat automatisch.
Nu doet zich alleen weer een nieuw probleem voor: ik zou graag een overzicht willen van de uren waarmee ik mag rekenen, dit lijkt mij het mooiste om dit in de rij van de zaterdag te doen. Nu ben ik al bezig geweest met WERKDAG, maar dit kan ik nog niet goed toepassen. Ik ga nu verder proberen, maar mocht één van jullie (of een ander uiteraard!) mij hiervan een voorbeeld kunnen geven dan houd ik mij aanbevolen! ;)

Nogmaals voor jullie allebei: enorm bedankt!!! :thumb:
 

Bijlagen

Hallo,

Trim haalt de spaties voor en achter weg, dus net als spaties.wissen.
Zo voorkom je dat het programma "werknemer 1 " niet herkent omdat er een spaties achter de 1 staat.

Ik begrijp eerlijk gezegd niet precies wat je bedoelt met:
ik zou graag een overzicht willen van de uren waarmee ik mag rekenen

Met vriendelijke groet,


Roncancio
 
Laatst bewerkt:
Aha, dit had ik dus kunnen ondervangen door een underscore te gebruken.
Kort uitgelegd: ik mag 55 uur per week werken. Van mijn totaal gewerkte uren (meestal tussen de 60 en 70) mag ik de pauzes en de 'bijrijder-tijden' afhalen, waarna het aantal uren overblijft waarmee ik mag gaan rekenen. Mochten die 'rekenuren' de 55 overschrijden moet ik dit binnen een tijdsbestek van 26 weken vereffenen. Hiervoor wil ik dus een weekgemiddelde waardoor ik kan zien hoe ik ervoor sta. Ik heb nu een hulpkolom ingevoegd en dit lijkt te werken; zij het dat dit niet de mooiste en meest 'uitdagende' manier is. Ik ga het verder verwerken en zal dan een link plaatsen.
 
Hallo, ik ben nog wat meer aan het personaliseren gegaan en loop nu tegen 2 dingen aan. Allereerst gebruik ik op het invulblad een 'geautomatiseerde' datumdoorloop. Deze werkt alleen de macro 'gegevensverwerking' tegen Dit heb ik al geprobeerd op te lossen door onderstaande code, dit lukte echter niet (niet alle gegevens werden overgenomen). Is hier een redelijk gemakkelijke oplossing voor te vinden of kan ik beter de formules in de andere cellen verwijderen als de 1e van de maand niet op een maandag is?
Ook heb ik een extr kolom ingezet voor het weekoverzicht; dit resulteert echter met mijn formules in zowel een zootje in de kolommen C, D en E als in een foutmelding in kolom F. Wat doe ik hiermee verkeerd of hoe doe ik dit simpeler?
GRTZ Art.

P.S.: Ik heb even de werkbladen van de andere werknemers verwijderd: als ik het werkblad van de 1e werknemer naar mijn zin heb kan ik deze kopiëren voor de andere 5 werknemers.
Code:
Sub gegevensverwerking()
With Worksheets(Trim$(Range("D1"))).Range("A:A")
        Set dag1 = .Find(Day(Worksheets("invulblad").Range("A5")), lookat:=xlPart, LookIn:=xlValues)
        If Not Range("A10").Value = Date Then GoTo dag3:
        Set dag2 = .Find(Day(Worksheets("invulblad").Range("A10")), lookat:=xlPart, LookIn:=xlValues)
dag3:
        If Not Range("A15").Value = Date Then GoTo dag4:
        Set dag3 = .Find(Day(Worksheets("invulblad").Range("A15")), lookat:=xlPart, LookIn:=xlValues)
dag4:
        If Not Range("A20").Value = Date Then GoTo dag5:
        Set dag4 = .Find(Day(Worksheets("invulblad").Range("A20")), lookat:=xlPart, LookIn:=xlValues)
dag5:
        If Not Range("A25").Value = Date Then GoTo actie:
        Set dag5 = .Find(Day(Worksheets("invulblad").Range("A25")), lookat:=xlPart, LookIn:=xlValues)
    End With
actie:
    If Not dag1 Is Nothing Then
        If Worksheets(Trim$(Range("D1"))).Range("B" & dag1.Row) = "" Then
            Worksheets(Trim$(Range("D1"))).Range("B" & dag1.Row) = Worksheets("invulblad").Range("K1")
            Worksheets(Trim$(Range("D1"))).Range("C" & dag1.Row) = Worksheets("invulblad").Range("M6")
            Worksheets(Trim$(Range("D1"))).Range("D" & dag1.Row) = Worksheets("invulblad").Range("M7")
            Worksheets(Trim$(Range("D1"))).Range("E" & dag1.Row) = Worksheets("invulblad").Range("M8")
            Worksheets(Trim$(Range("D1"))).Range("F" & dag1.Row) = Worksheets("invulblad").Range("M9")
        End If
    End If
    If Not Range("A10").Value = Date Then GoTo actie3:
    If Not dag2 Is Nothing Then
        If Worksheets(Trim$(Range("D1"))).Range("B" & dag2.Row) = "" Then
            Worksheets(Trim$(Range("D1"))).Range("B" & dag2.Row) = Worksheets("invulblad").Range("K1")
            Worksheets(Trim$(Range("D1"))).Range("C" & dag2.Row) = Worksheets("invulblad").Range("M11")
            Worksheets(Trim$(Range("D1"))).Range("D" & dag2.Row) = Worksheets("invulblad").Range("M12")
            Worksheets(Trim$(Range("D1"))).Range("E" & dag2.Row) = Worksheets("invulblad").Range("M13")
            Worksheets(Trim$(Range("D1"))).Range("F" & dag2.Row) = Worksheets("invulblad").Range("M14")
        End If
    End If
actie3:
    If Not Range("A15").Value = Date Then GoTo actie4:
    If Not dag3 Is Nothing Then
        If Worksheets(Trim$(Range("D1"))).Range("B" & dag3.Row) = "" Then
            Worksheets(Trim$(Range("D1"))).Range("B" & dag3.Row) = Worksheets("invulblad").Range("K1")
            Worksheets(Trim$(Range("D1"))).Range("C" & dag3.Row) = Worksheets("invulblad").Range("M16")
            Worksheets(Trim$(Range("D1"))).Range("D" & dag3.Row) = Worksheets("invulblad").Range("M17")
            Worksheets(Trim$(Range("D1"))).Range("E" & dag3.Row) = Worksheets("invulblad").Range("M18")
            Worksheets(Trim$(Range("D1"))).Range("F" & dag3.Row) = Worksheets("invulblad").Range("M19")
        End If
    End If
actie4:
    If Not Range("A20").Value = Date Then GoTo actie5:
    If Not dag4 Is Nothing Then
        If Worksheets(Trim$(Range("D1"))).Range("B" & dag4.Row) = "" Then
            Worksheets(Trim$(Range("D1"))).Range("B" & dag4.Row) = Worksheets("invulblad").Range("K1")
            Worksheets(Trim$(Range("D1"))).Range("C" & dag4.Row) = Worksheets("invulblad").Range("M21")
            Worksheets(Trim$(Range("D1"))).Range("D" & dag4.Row) = Worksheets("invulblad").Range("M22")
            Worksheets(Trim$(Range("D1"))).Range("E" & dag4.Row) = Worksheets("invulblad").Range("M23")
            Worksheets(Trim$(Range("D1"))).Range("F" & dag4.Row) = Worksheets("invulblad").Range("M24")
        End If
    End If
actie5:
    If Not Range("A25").Value = Date Then GoTo Einde::
    If Not dag5 Is Nothing Then
        If Worksheets(Trim$(Range("D1"))).Range("B" & dag5.Row) = "" Then
            Worksheets(Trim$(Range("D1"))).Range("B" & dag5.Row) = Worksheets("invulblad").Range("K1")
            Worksheets(Trim$(Range("D1"))).Range("C" & dag5.Row) = Worksheets("invulblad").Range("M26")
            Worksheets(Trim$(Range("D1"))).Range("D" & dag5.Row) = Worksheets("invulblad").Range("M27")
            Worksheets(Trim$(Range("D1"))).Range("E" & dag5.Row) = Worksheets("invulblad").Range("M28")
            Worksheets(Trim$(Range("D1"))).Range("F" & dag5.Row) = Worksheets("invulblad").Range("M29")
        End If
    End If
Einde:
    Worksheets(Trim$(Range("D1"))).Select
End Sub
 

Bijlagen

Laatst bewerkt:
Hallo,
In de eerste plaats kan je de bovenstaande code gebruiken als vervanging voor de code die je heeft toegevoegd.
De code controleert of de cellen leeg zijn en zo niet dan worden de datums en bijbehorende gegevens in het werkblad gezocht.

Code:
Sub gegevensverwerking()
For Rij = 5 To 25 Step 5
    If Worksheets("invulblad").Cells(Rij, "A") <> "" Then
        With Worksheets(Trim$(Range("D1"))).Range("A:A")
            Set Dag = .Find(Day(Worksheets("invulblad").Cells(Rij, "A")), lookat:=xlPart, LookIn:=xlValues)
            If Not Dag Is Nothing Then
                Worksheets(Trim$(Range("D1"))).Range("B" & Dag.Row) = Worksheets("invulblad").Range("K1")
                Worksheets(Trim$(Range("D1"))).Range("C" & Dag.Row) = Worksheets("invulblad").Cells(Rij + 1, "M")
                Worksheets(Trim$(Range("D1"))).Range("D" & Dag.Row) = Worksheets("invulblad").Cells(Rij + 2, "M")
                Worksheets(Trim$(Range("D1"))).Range("E" & Dag.Row) = Worksheets("invulblad").Cells(Rij + 3, "M")
                Worksheets(Trim$(Range("D1"))).Range("F" & Dag.Row) = Worksheets("invulblad").Cells(Rij + 4, "M")
            
            End If
        End With
    End If
Next
Worksheets(Trim$(Range("D1"))).Select
End Sub


Je kan verder gebruik maken van de functie Weekdag ipv een extra kolom in de Z-kolom.
Dus

A1 = datum van een maandag --> Weekdag(A1;2) = 1
A1 = datum van een dinsdag --> Weekdag(A1;2) = 2

etc

Waar ik wat moeite mee heb, is dat je de kentekens en de titels ("totalen" en "berekend") in dezelfde kolom zet. Ik zou ze in aparte kolommen zetten.
De formules zijn dan ook makkelijk aan te passen en te onderhouden.
 
Laatst bewerkt:
Hallo Roncancio, bedankt voor je aangepaste code, deze werkt weer perfect! Ook bedankt voor je suggestie aangaande de functie 'weekdag', maar hier heb ik toch een extra kolom voor nodig, of doe ik iets verkeerd? Verder ben ik nog wat aan het vogelen geweest en zoals ik hem nu heb is hij nagenoeg naar mijn zin; alleen het gebruiksgemak moet nog blijken uiteraard. Los van mijn vragen moet ik nog weten of er met een peildatum gewerkt gaat worden (het meest waarschijnlijk) of dat een gemiddelde behaald dient te worden binnen een periode van 26 weken vanaf de 'overschrijding'. Hierop moet ik mijn bestand dus nog iets aanpassen.
Allebei nogmaals heel erg bedank voor jullie hulp; zonder jullie inspanningen had het mij echt niet gelukt! :thumb:
 

Bijlagen

Hoi Roncancio, ik heb vandaag de persoon gesproken die met het bestand moet gaan werken en zij had nog wat wensen, voornamelijk omtrent de vormgeving van het werknemersblad. Nu heb ik dit aangepast aan hoe zij het wil, maar nu werkt de macro 'gegevensverwerking' niet meer correct. Ik heb wat aanpassingen geprobeerd, maar hiermee wordt echt alles door elkaar gehaald. Ik denk dat ik de 'if' moet uitbreiden met 'or else', klopt dit? Ik ga zo nog e.e.a. uitproberen maar misschien dat jij een pasklare oplossing hebt?
GRTZ Art.
 

Bijlagen

Hallo,

De macro gegevensverwerking werkt naar behoren. Dwz: de macro bekijkt de datums in de A-kolom van het invulblad en vult de bijbehorende gegevens op het juiste werkblad en bij de juiste maand.

Ik heb ook de datumaanduiding aangepast omdat het zoeken naar datums met VBA nogal nauw luistert .

Met vriendelijke groet,


Roncancio
 
Laatst bewerkt:
Beste Roncancio, hij werkt weer prima! Die datumaanduiding zal ik veranderen. Wat heb je nu trouwens veranderd; waarom heb je die 2 dims toegevoegd? Ik zat trouwens veel te moeilijk te denken met mijn 'or else', de range uitbreiden had ik niet bedacht... :o
GRTZ en alweer bedankt!
 
Laatst bewerkt:
Hallo,

Die datumaanduiding zal ik veranderen.
Dat hoeft niet ! De macro kan de datums zoals die in de A-kolom van het invulblad staan, vinden. Zoals je ziet, heb ik de macro ook korter gemaakt.

Waarom heb je die 2 dims toegevoegd?
Met de dims benoem je de variabelen. Het is een goede gewoonte om dat te doen bij het programmeren.
Doe je dat niet, dan reserveert VBA (te) veel geheugenruimte voor je variabelen.
Door dim te gebruiken geef je aan hoe groot de variabelen zijn.

Voorbeelden
Code:
Dim Getal as Long (4 bytes)
Dim Getal as Variant (16 bytes)
Het niet benoemen van een variabele staat dus gelijk aan Dim Getal as Variant
Vaak is Long voldoende (van -2.147.483.648 tot 2.147.483.647).
Indien je veel variabelen in je programma heeft die Variant zijn, dan neemt dat onnodig veel geheugenruimte in beslag dat negatief uitwerkt op de snelheid van je programma.

Met vriendelijke groet,


Roncancio
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan