Automatische datum ophoging

Status
Niet open voor verdere reacties.

remmie63

Gebruiker
Lid geworden
4 jan 2011
Berichten
380
Kan iemand mij helpen aan programmeerregeltjes voor het volgende: Ik heb een tabel waarin ik de presentie van een viertal personen moet bijhouden. Het eerste veld per regel is steeds een datumveld opgevolgd door vier selectie (ja/nee) velden. Nu moet de datum zo werken dat bij elke volgend regel de datum automatisch één dag ophoogt Hij moet starten op dag 1 van het jaar en helemaal mooi zou zijn als de weekends werden overgeslagen.

Alvast bedankt!
 
Ik heb een voorbeeldje gemaakt met een functie, die op twee formulieren wordt gebruikt: f_Test Doorlopend en f_Test Enkelvoudig. Kijk maar eens of je er wat aan hebt.
 

Bijlagen

Beste Octafish,

heel hartelijk bedankt! Ik ga er morgen meteen mee aan de slag.
Ik laat nog wat weten. Ik zet de vraag als opgelost.

Groet
 
Datum ophoging

Beste Octafish,

ik heb het voorbeeld toegepast zonder de dagdeelfunctie.
Probleem waar ik nu tegen aan loop is dat alleen de huidige datum wordt gepakt gebonden dus aan de dag dat ik het bestand open en bewerk. Als ik vandaag dus 3 regels zou bijvoegen staat er 3 maal 13 jan 2011. De bedoeling is eigenlijk dat de eerste regel begint op de eerste werkdag van het jaar in dit geval 03 jan 2011. Vervolgens bij een nieuwe regel 4 jan 2011, volgende nieuwe regel 5-jan enz. Bij voorkeur daarbij dus de weekenden over te slaan. Maar dat is van minder belang.
Groet
 
Het voorbeeld was ook meer bedoeld om te laten zien hoe je datums kunt ophogen, met het overslaan van niet-werkdagen. Niet als een kant en klare oplossing ;)
Ik zal het voorbeeld wat meer op jouw vraag toesnijden. Overigens wil ik dan nog wel weten waarom je (blijkbaar) alle werkdagen van een jaar in een tabel zou willen zien; het lijkt mij dat je alleen een record maakt (en dus een datum genereert) als je iets op te slaan hebt... Op basis van die records kun je namelijk altijd een overzicht maken met de ontbrekende dagen (die je dus niet hebt ingevuld) erbij.
 
Beste Octafish,

Het is puur en alleen een aanwezigheidsregistratie van een aantal personen die op verschillende momenten tijdens een werkweek aanwezig behoren te zijn. Ik heb een eenvoudige tabelletje gemaakt waar per record de datum staat en vervolgens een viertal namen met Ja/Nee velden. Als onderstaand voorbeeld.

Datum Michel Leo Wiel Frans
03-01-2011 -1 0 -1 -1
04-01-2011 0 0 0 -1
05-01-2011 -1 0 -1 -1

Met deze tabel gekoppeld aan een NAW tabel genereer ik o.a. een reiskostenformulier(rapport) op naam van ieder afzonderlijk persoon. Omdat ik deze registratie niet dagelijks uitvoer is Date() niet van toepassing want dan sla ik dagen over.
Groet, Remco
 
Met deze code kun je een tabel (in het voorbeeld [tDatums]) vullen met een jaar aan werkdagen. Er zit een check in om te voorkomen dat je een jaar dubbel invoert.

Code:
Private Sub cmdDatumsToevoegen_Click()
Dim iBegin As Long, iStart As Long, iEind As Long, iLaatsteDag As Long, dtEind As Date
    With CurrentDb.OpenRecordset("SELECT Max(CDbl([Werkdag])) AS LaatsteDag FROM tDatum;")
        If .RecordCount = 1 Then
            iLaatsteDag = .Fields(0).Value
        End If
        .Close
    End With
    iStart = CDbl(DateSerial(Year(Date), 1, 1))
    iEind = CDbl(DateSerial(Year(Date) + 1, 1, 1))
    If iLaatsteDag > iStart Then
        iStart = iLaatsteDag + 1
        Do Until Weekday(CDate(iStart), vbMonday) = 1
            iStart = iStart + 1
        Loop
        iEind = CDbl(DateSerial(Year(CDate(iStart)) + 1, 1, 1))
    End If
    
    iBegin = iStart
    With CurrentDb.OpenRecordset("tDatum")
        Do While iStart < iEind
            If Weekday(CDate(iStart), vbMonday) < 6 Then
                .AddNew
                !Werkdag = CDate(iStart)
                .Update
            End If
            iStart = iStart + 1
        Loop
        .Close
    End With
    MsgBox "Datums " & CDate(iBegin) & " - " & CDate(iEind - 1) & " toegevoegd."
End Sub
Kijk maar of je deze routine kunt aanpassen naar jouw situatie.
 
Beste Octafish,

Dank voor je hulp.
Ik krijg het met geen mogelijkheid aan het draaien. "werkdag" is geen veld in mijn db en heb deze dus gewijzigd in "datum". Hoe dan ook het loopt niet.
Ik heb hem ook, in jouw toegezonden werktijden db, ingepast. Ik weet eerlijk gezegd niet of deze code nu de oude in zijn geheel moet vervangen of alleen voor het datumdeel. Ik heb alle opties uitgeprobeert. Zonder resultaat.
Heel vervelend maar ik heb dus weer hulp nodig!

Groet, Remco
 
Ik heb e.e.a. in een voorbeeldje verwerkt. Op Formulier1 staat een knop Datums toevoegen. Deze voert de procedure uit.
 

Bijlagen

Wederom dank voor de moeite! Ik ga ermee aan de slag. Wat mij opviel was dat dit een heel andere aanpak is dan de vorige code die je mij gestuurd hebt.
Ik ga ermee aan de slag. Dank!

ps. ik heb, dankzij deze website, de knoop doorgehakt om het programmeren zelf onder de knie te gaan krijgen.
 
:thumb: Dat zien we graag! Je ziet wat je allemaal kunt doen met een pakket als je er zelf ook wat tijd in steekt!
Overigens ga ik in de cursus straks al vrij snel beginnen met programmeren, omdat ik vind dat het een wezenlijk onderdeel is van het ontwerpen en bouwen van een database. Bij het ontwerpen hou je namelijk al rekening met de onderdelen die je zelf moet gaan maken. Eerst een db maken met de standaardfaciliteiten, en er dan achterkomen dat het toch allemaal niet zo jofel werkt, kost m.i. veel meer tijd dan als je gelijk al rekening houdt met de functies die je wilt gaan gebruiken, en zelf moet ontwerpen.
En het is niet zo heel veel anders of je een formulier maakt met allerlei afhankelijkheden, of dat je iets in een programmeertaal leert. In beide gevallen moet je het resultaat voor ogen hebben dat er uiteindelijk uit moet rollen, en je moet een beetje logisch kunnen/willen denken. Dus: alvast veel programmeerplezier!
 
Klopt inderdaad! Met een gestructureerde aanpak is het resultaat altijd beter dan achteraf allerlei aanpassingen moeten realiseren. Ik zie dat op mijn werk ook. Ooit ben ik begonnen met een aantal zaken te automatiseren die voorheen handmatig werden uitgevoerd. Nu, 7 jaar later, is deze database zo groot geworden door steeds meer functies er in te persen dat het geheel bijna niet meer te overzien is. Ik ben dan ook de enigste die daar nog wat in kan sleutelen en dan moet ik er veel tijd voor uittrekken.
Voor wat betreft de "automatische datum ophoging" dat werkt prima. Ik heb de db zo goed als werkend. Hiervoor nogmaals dank.
Groet, Remco
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan