macro in VBA aanpassen

Status
Niet open voor verdere reacties.

jowey

Gebruiker
Lid geworden
18 mei 2017
Berichten
98
Hallo allemaal,

Ik zit met een stukje programmeer van VBA dat ik wil aanpassen.
Om te beginnen wil ik duidelijk maken dat ik echt niet veel van VBA weet en dat ik net aan wel stukjes programmeer kan lezen.
Het draait om het volgende stukje.

Ik stuur het originele bestand met alle namen aangepast.
Op dit moment zit er in het tabblad ploegrooster een macro die als je bij B1:B3 de gegevens selecteert, hij een nieuw excel bestand aanmaakt
dat identiek is aan het tabblad ploegrooster met de namen in O8:O..

Dit is prima maar graag zou ik deze handeling willen versimpelen naar 1 handeling voor de hele week.
Graag zou ik de macro die erin zit willen laten staan maar wil ik een macro toevoegen die hetzelfde doet alleen dan voor de hele week.

Nu vul je bijvoorbeeld week 27 in dan de dag (ma t/m zo) en dan de dienst (nacht, vroeg en laat)
Graag zou ik een macro willen waarbij je alleen de week invult en vervolgens de button voor de macro intoetst waarna hij dus 19 excel bestandjes genereert met
hetzelfde als in de macro die er al inzit.

Dit zijn de 19 bestanden die hij zou moeten genereren

1 week 27 maandag vroeg 1 week 27 maandag laat 1 week 26 zondag nacht (uitzondering)
2 week 27 dinsdag vroeg 2 week 27 dinsdag laat 2 week 27 maandag nacht
3 week 27 woensdag vroeg 3 week 27 woensdag laat 3 week 27 dinsdag nacht
4 week 27 donderdag vroeg 4 week 27 donderdag laat 4 week 27 woensdag nacht
5 week 27 vrijdag vroeg 5 week 27 vrijdag laat 5 week 27 donderdag nacht
6 week 27 zaterdag vroeg 6 week 27 zaterdag laat 6 week 27 vrijdag nacht
7 week 27 zondag vroeg en laat (uitzondering)

Is dit mogelijk inclusief uitzonderingen? (3 uitzonderingen; 1e nacht is van week 26 zondag nacht, er is geen zaterdagnacht en zondag is gecombineerde dienst)
En is het ook mogelijk dat ieder bestand een eigen naam krijgt. Bij voorkeur bovenstaande namen bij corresponderende bestanden

Dan nog 2 toevoegingen.
Er zitten formules in het tabblad ploegrooster. Die zijn nodig om de uitzendkrachten in te vullen aan de hand van een excel bestand. (bestand is hierdoor traag geworden en loopt vaak vast. Is hier iets aan te doen? Ik zat zelf te denken aan een macro die deze formules invult nadat ik de bestandje gegenereert heb)

Er zit nog een macro in waar ik nog mee bezig ben. Deze is om de uren voor vaste mensen automatisch te vullen. Vroeg 6-15 laat 15-24 nacht 22-7

Alvast bedankt.

Gr Jowey

Bekijk bijlage Planning 2017.test1.xlsm

ww is KN2017
 
Laatst bewerkt:
Je kan beter een bestand plaatsen die de kern van de vraag weergeeft dan een bestand met ontzettend trage formules. De code is niet zo moeilijk. Maar wat je er mee moet?

Zal zoiets worden zonder de uitzonderingen maar die kan je vast zelf wel wel ondervangen.
Code:
Sub VenA()
  ar = Split("maandag dinsdag woensdag donderdag vrijdag zaterdag zondag")
  ar1 = Split("vroeg laat nacht")
  With Sheets("ploegrooster")
    For j = 0 To UBound(ar)
      For jj = 0 To UBound(ar1)
        .[B2] = ar(j)
        .[B3] = ar1(jj)
        c00 = ThisWorkbook.Path & "\" & Format(.[B4], "yyyymmdd-") & ar1(jj) & ".xlsx"
        .Copy
        With ActiveWorkbook
          .Sheets(1).UsedRange = .Sheets(1).UsedRange.Value
          .SaveAs c00, 51
          .Close 0
        End With
      Next jj
    Next j
  End With
End Sub
 
@V&A ;)

Code:
Sub M_snb()
   For j = 0 To 6
     MsgBox WeekdayName(j + 1, , 2)
     MsgBox Format(j + 2, "dddd", vbMonday)
     MsgBox Application.GetCustomListContents(2)((j + 1) Mod 7 + 1)
   Next
End Sub
 
Je kan beter een bestand plaatsen die de kern van de vraag weergeeft dan een bestand met ontzettend trage formules. De code is niet zo moeilijk. Maar wat je er mee moet?

Hey VenA

Op dit moment maak ik de planning door voor elke dienst de macro in te drukken en het bestand op een bepaalde plek op te slaan. Dit doe ik dus 19 keer.
Vervolgens zet ik de vaste mensen weg op een bepaalde plek (niemand heeft een vaste plek. afhankelijk van de bezetting). Dan resteren nog diverse plekken die opgevuld moeten worden met uitzendkrachten.
En omdat we op verschillende dagen verschillende druktes kennen is niet elke planning hetzelfde.

Mijn doel is dus gewoon alles wat ik kan automatiseren ook automatiseren.

Die trage formules gaan er namelijk ook uit. Zodra ik de namen op de juiste plek heb kopieer ik vervolgens alles als waarde omdat ik de formules daarna niet meer nodig heb.
Wel ga ik de formules inplakken via een macro. Anders zit ik altijd met een traag bestand.
 
Hey VenA

Jouwe code doet het 2e deel van wat ik zoek.
De bedoeling is dat hij macro 1 en jouw code tegelijk uitvoert.

Met de macro aanwezigheidvullen haalt hij de juiste namen uit het tabblad jaarplanning.
Deze namen komen dan in het ploegrooster en dan moet hij pas jouw macro uitvoeren.
En dit moet hij dan doen voor alle dagen in de week achter elkaar doen.

Als ik het zo zie dan denk ik dat het 1 macro moet worden. Dus een combi van de aanwezige macro met jouw code.



Daarnaast heb ik een deel van jouw code aangepast opdat hij beter overeen komt met de naam voor het opslaan


[[c00 = ThisWorkbook.Path & "" & "week" & " " & [B1] & " " & [B2] & " " & ar1(jj) & ".xlsx"]]

Ik komt er echter nog niet uit om de cijfers 1 t/m 7 voor het bestand te krijgen.

Nu slaat ie m op als: week 27 maandag vroeg
Dit zou 1 week 27 maandag vroeg moeten worden.


@ snb
jouw code begrijp ik niet. Moet ik deze in die van VenA ergens inplakken. En waarom gebruik je msgbox?
 
Laatst bewerkt:
Volgens mij gaat dit jouw petje te boven. Het doel van Helpmij.nl bij dit soort vragen is, volgens mij, om de vraagsteller een duwtje in de rug te geven hoe het aan te pakken is. Als je een complete applicatie wilt hebben dan kan je beter een programeerder inhuren die programeer wat beter kan lezen.

@snb,
Taal onafhankelijk;)
Code:
ar = Sheets("afblijven").Columns(15).SpecialCells(2)
 
Volgens mij gaat dit jouw petje te boven. Het doel van Helpmij.nl bij dit soort vragen is, volgens mij, om de vraagsteller een duwtje in de rug te geven hoe het aan te pakken is. Als je een complete applicatie wilt hebben dan kan je beter een programeerder inhuren die programeer wat beter kan lezen.

@snb,
Taal onafhankelijk;)
Code:
ar = Sheets("afblijven").Columns(15).SpecialCells(2)

Begrijpelijk.
Daarom begon ik mijn post ook met de opmerking dat ik niet veel van VBA weet.

Dan voor de duw in de rug. Als ik het goed begrijp moet ik de 2 codes in VBA combineren om tot de oplossing te komen toch?
Een bevestiging hierop zou fijn zijn. Dan ga ik mij op de onderdelen die in de codes staan richten en kijken wat ik ervan kan maken.

Gr Jowey
 
Quoten is niet nodig.
Ik heb geen idee over welke twee codes je het hebt dus het combineren lijkt mij niet nodig. Je kan wat proberen toch?
 
Code:
Sub aanwezigheidvullen()
'
' aanwezigheidvullen Macro
'

'
    Range("N8:N158").Select
    Selection.ClearContents
    Sheets("afblijven").Select
    ActiveSheet.Range("$A$5:$F$105").AutoFilter Field:=6, Criteria1:="<>"
    Range("F6:F110").Select
    Selection.Copy
    Sheets("ploegrooster").Select
    Range("N8").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

'    ActiveSheet.Unprotect
    Sheets("ploegrooster").Select
    Sheets("ploegrooster").Copy
    ActiveSheet.Shapes.Range(Array("Button 1")).Select
    Selection.Delete
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True

End Sub

Dit is de code die ik al heb.

Het eerste deel is wat er moet gebeuren per dienst.
Jouw code is wat er op het eind moet gebeuren.

Nu denk ik dat ik dus het eerste deel moet laten staan. Jouw code moet versimpelen naar 1 dienst
en van deze combinatie een herhaling maken met next j bijvoorbeeld

Ik ga er iig mee aan de slag.

gr Jowey
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan