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

Datum paar dagen opschuiven met Macro

Status
Niet open voor verdere reacties.
Gelukkig is het slecht weer want ik zit de hele middag
al mijn hoofd te breken.

Je code brengt me een heel stuk op weg.

Maaaar.

Stel ik heb de vrijdag en we gaan de planning 4 dagen
verzetten. Dan houd de code er geen rekening mee dat
we over het weekend gaan want dat begint pas vanaf
6 dagen.

Je zou dus per werkdag even moeten kijken of je
over het weekend gaat met de te verschuiven dagen.

Nou ik ga even wat anders doen want heb inmiddels vierkante
ogen. maar ik weet zeker dat het kan en dat er een
oplossing is. Alleen is die nog even niet in zicht

Wel alvast bedankt voor je meedenken.

Bart

Bart dan mis je net het mooie van deze oplossing.
In 'schuif' wordt een waarde uitgerekend van Weekday + aantal dagen dat je wilt schuiven.
Als deze boven de 6 komt dan zit er een weekend dag bij.
bv 4-9-2008 is een donderdag dan is Weekday gelijk aan 5. Stel je wilt 6 dagen schuiven dan wordt 'schuif' 5+6 = 11. 11 is groter dan 6 dus er zit een weekend.

De eerste berekende datum inclusief verschuiving wordt daaarom met 2 verhoogd om over het weekend heen te gaan.

Wim
 
top top top

Ik denk dat ik er een beetje te diep in zat
en dan zie je het even niet meer.
Het werkt nu super.

Waar ik nog wel tegen aanloop is dat als en in de reeks
een datum niet is ingevuld dan stopt de code daar.
Stel ik heb 50 cellen ingevuld onder elkaar en één
cel is leeg dan stopt hij boven de cel.

En stel ik wil terug met de planning schuiven.
Als ik bijvoorbeeld -4 dagen in typ. Dan moeten de
weekende omgekeerd maar hoe doe ik dat

Nou als je dit oplost dan ben ik maandag de held
op kantoor.

Maar zal je naam even noemen.

Bart
 
WimenBeer, Bart1965, Ik vond 't onderwerp toch zéér fascinerend en kon 't niet laten om óók een stukje te programmeren. Deze code pakt elke datum in je sheet aan en houdt rekeing met elk weekend dat er gevonden wordt. Pas wel ff de cel aan in de code waarvandaan het aantal plus of min dagen gevonden wordt.
Code:
Sub VeranderDatum()
Dim c As Range

    For Each c In Cells.SpecialCells(xlCellTypeConstants)
        If IsDate(c.Value) Then c.Value = TelDagen(c.Value, Range("A1").Value) 'verander de A1 in de cel waar je plus of min staat
    Next c

End Sub

Function TelDagen(Datum As Date, VerlengDagen As Integer) As Date
Dim TempDatum As Date

    If VerlengDagen < 0 Then
        Do
            i = i - 1
            TempDatum = Datum + i
            If Weekday(TempDatum, 2) > 5 Then
                VerlengDagen = VerlengDagen - 1
            End If
        Loop While i > VerlengDagen
    Else
        Do
            i = i + 1
            TempDatum = Datum + i
            If Weekday(TempDatum, 2) > 5 Then
                VerlengDagen = VerlengDagen + 1
            End If
        Loop While i < VerlengDagen
    End If
    
    TelDagen = Datum + VerlengDagen
    
End Function

Groet, Leo
 
Laatst bewerkt:
Ik wordt gek

Beste Leo,

Bij het aanschouwen van je oplossing ging bij mij
volledig het licht uit. Van Wim had ik een oplossing
gekregen die ik nog redelijk kon volgen.

Ik heb jouw code geplaats en dacht dat ik gek
werd. Het werkt precies zoals ik in gedachte had.
Of je nu vooruit wilt, achteruit, 5 dagen, 3 dagen
of 200 dagen het klopt altijd.

Nu heb ik alleen nog even een vraagtje op dit forum
uitgezet zodat zich eerst even een box opend die
vraagt hoeveel dagen de planning verschoven dient te
worden en dan overgaat tot jouw macro met daarin
mee nemen het getal wat in de box is ingevoerd.

Als dat werkt dan is het helaam voor elkaar.

Wim, jij ook hartelijk bedankt voor je inspanning
want ik heb er wel heel veel van geleerd, en het was
toch rot weer gisteren.
 
Bart1965, Vervang de bestaande Sub voor deze.... (de blauwe tekst is nieuw)
Code:
Sub VeranderDatum()
Dim c As Range
[COLOR="Blue"]Dim iAantalDagen As Integer

    iAantalDagen = Application.InputBox("Hoeveel WERKDAGEN wil je vóór- of achteruit?", "Aanpassing", 0, , , , , 1)
    If iAantalDagen = 0 Then Exit Sub[/COLOR]
    
    For Each c In Cells.SpecialCells(xlCellTypeConstants)
        If IsDate(c.Value) Then c.Value = TelDagen(c.Value, iAantalDagen)
    Next c

End Sub

Groet, Leo
 
In VBA is dagen bij data optellen simpel:
Code:
for each cl in sheets(1).columns(1).specialcells(xlcelltypeconstants)
  if isdate(cl) then cl=cl+3
next

Als je dit té simpel vindt kun je gebruik maken van de ingebouwde methode dateadd

Code:
for each cl in sheets(1).columns(1).specialcells(xlcelltypeconstants)
  if isdate(cl) then cl=dateadd("d",3,cl)
next
 
Iedereen bedankt voor de medewerking

Alles werk nu prima ik ga de vraag op opgelost zetten

Super

Bart
 
Bart, Wil je je andere vraag dan ook nog op opgelost zetten? Dank.

Groet, Leo
 
Is het dan niet handiger om een spinbutton te gebruiken met minimumwaarde -7 en maximumwaarde +7. Dat bespaart knop 6 en de gevalideerde invoer van twee cellen.
Aan de spinbutton kan de code van knop 6 worden gehangen bij de gebeurtenisprocedure change.
 
Is het dan niet handiger om een spinbutton te gebruiken met minimumwaarde -7 en maximumwaarde +7. Dat bespaart knop 6 en de gevalideerde invoer van twee cellen.
Aan de spinbutton kan de code van knop 6 worden gehangen bij de gebeurtenisprocedure change.

snb

Uiteraard heb je daar volledig gelijk in maar de afvraag van de gebruikte waarde blijft wel bestaan. Dus ik dacht (in mijn onschuld) dat dit net zo makkelijks was.

Wim
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan