functie

Status
Niet open voor verdere reacties.

HankMegens

Gebruiker
Lid geworden
1 sep 2015
Berichten
86
Hallo,

Ik ben een functie aan het maken, die op basis van een bepaalde dag van de week bepaald hoeveel rocords er voor die dag aangemaakt moeten worden.
Nu wil ik dit doen op basis van de dagnaam, bv maandag of zaterdag

De functie is nog maar in zijn beginfase, maar ik loop tegen het feit aan dat ik de opmaak van de nieuwe datum die ik aanmaak de weergave 00:00:00 geeft ipv maandagh, dinsdag ect.
Nu heb ik een formuliertje gemaakt en daar de opmaak van de weekdag op dddd gezet. Maar deze blijft zaterdag weergeven.
Dus lijkt het niet in de opmaak te zitten, maar ergens anders.

Kom er niet uit.
Code:
Function fplanningdag()
On Error Resume Next

    Dim ddatum As Date
    Dim ddag As Date
    Dim dbs As DAO.Database
    Dim rst As DAO.Recordset
        
    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset("Tplanning")
    ddatum = DMax("datum", "Tplanning") + 1
    MsgBox ddatum
    ddag = Format(ddatum, "dddd")
    MsgBox ddag
        
    With rst
        .AddNew
        !datum = ddatum
        !weekdag = ddag
        !aangemaakt = Date
        .Update
    End With
        
    rst.Close
    dbs.Close

End Function

Mocht de database nodig zijn, dan hoor ik het graag.
 
de uitkomst van de format functie is een string, niet een datum.
 
Nog een vervolgvraag mbt mijn initiële vraag.

Het probleem is opgelost en de juiste weekdag wordt nu aan de tabel toegevoegd.
Nu heb ik ook een tabel met weekdagen en een aantal. bv maandag 1, vrijdag 5
Nu wil ik dus dat er op maandag een record wordt gemaakt en op vrijdag 5
In de functie wil ik dus met DLOOKUP het juiste aantal uit de tabelhalen dat bij de weekdag hoort.
Ik krijg echter ten alle tijden nu het getal 0.
Het lijkt erop dat format(ddatum,"dddd") voor bv 3 januari 2023 een maandag, dit niet herkend als het woord maandag in mijn tabel met weekdagen en aantallen.
Hij wordt wel als het woord maandag in de tabel toegevoegd.

Is dit een format dingetje?

Dit is mijn huidige functie

Code:
Public Function fplanningdag()
On Error Resume Next

    Dim ddatum As Date
    Dim aantal As Integer
    Dim i As Integer
    
    Dim dbs As DAO.Database
    Dim rst As DAO.Recordset
        
    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset("Tplanning")
    ddatum = DMax("datum", "Tplanning") + 1
    
    aantal = DLookup("aantal", "Tweekdag", "weekdag =" & Format(ddatum, "dddd"))
    MsgBox aantal                   'tijdelijk om te testen
    MsgBox Format(ddatum, "dddd")   'tijdelijk om te testen
    aantal = 2                      'tijdelijk om te testen
       
    For i = 1 To aantal
        With rst
            .AddNew
            !datum = ddatum
            !weekdag = Format(ddatum, "dddd")
            !aangemaakt = Date
            .Update
        End With
    Next
    rst.Close
    dbs.Close

End Function
 
Ik ben een functie aan het maken, die op basis van een bepaalde dag van de week bepaald hoeveel rocords er voor die dag aangemaakt moeten worden.
Ik snap het aanzetje van je "functie" (die eigenlijk een procedure is) niet. Ik zie dat je de hoogste datum bepaalt en daar een dag bij optelt. Met die datum leg je een record vast. Over het bepalen van het aantal records per dag van de week zie ik (nog) niets.

In het record leg je bovendien de weekdag redundant vast. Die kan je immers afleiden uit de datum en behoor je dus niet vast te leggen.
 
Laatst bewerkt:
Check of bovenaan je module het volgende staat:
Code:
Option explicit
Anders kan je dat toevoegen, dan kan je geen fouten maken door variabelen te gebruiken die niet gedeclareerd zijn

vervolgens:

Code:
Public Function fplanningdag()
On Error Resume Next

    Dim ddatum As Date
    dim strWeekDag as string
    Dim aantal As Integer
    Dim i As Integer
    
    Dim dbs As DAO.Database
    Dim rst As DAO.Recordset
        
    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset("Tplanning")
    ddatum = DMax("datum", "Tplanning") + 1
    strWeekDag = Format(ddatum, "dddd")
    aantal = DLookup("aantal", "Tweekdag", "weekdag =""" & strWeekDag & """")
    MsgBox aantal                   'tijdelijk om te testen
    MsgBox Format(ddatum, "dddd")   'tijdelijk om te testen
    aantal = 2                      'tijdelijk om te testen
       
    For i = 1 To aantal
        With rst
            .AddNew
            !datum = ddatum
            !weekdag = strWeekDag
            !aangemaakt = Date
            .Update
        End With
    Next
    rst.Close
    dbs.Close

End Function
 
Ik snap het aanzetje van je "functie" (die eigenlijk een procedure is) niet. Ik zie dat je de hoogste datum bepaalt en daar een dag bij optelt. Met die datum leg je een record vast. Over het bepalen van het aantal records per dag van de week zie ik (nog) niets.

In het record leg je bovendien de weekdag redundant vast. Die kan je immers afleiden uit de datum en behoor je dus niet vast te leggen.

Dat ik hem nu vast is een tijdelijk iets. Deze zal uiteindelijk niet gebruikt worden, maar zoals jij zegt, afgeleid worden van de datum.
Het lijkt mij door het aantal dat ik voor een werkdag heb vastgelegd, kan gebruiken om het aantal records dat moet worden aangemaakt te bepalen. Toch?


Hank
 
Check of bovenaan je module het volgende staat:
Code:
Option explicit
Anders kan je dat toevoegen, dan kan je geen fouten maken door variabelen te gebruiken die niet gedeclareerd zijn

vervolgens:

Code:
Public Function fplanningdag()
On Error Resume Next

    Dim ddatum As Date
    dim strWeekDag as string
    Dim aantal As Integer
    Dim i As Integer
    
    Dim dbs As DAO.Database
    Dim rst As DAO.Recordset
        
    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset("Tplanning")
    ddatum = DMax("datum", "Tplanning") + 1
    strWeekDag = Format(ddatum, "dddd")
    aantal = DLookup("aantal", "Tweekdag", "weekdag =""" & strWeekDag & """")
    MsgBox aantal                   'tijdelijk om te testen
    MsgBox Format(ddatum, "dddd")   'tijdelijk om te testen
    aantal = 2                      'tijdelijk om te testen
       
    For i = 1 To aantal
        With rst
            .AddNew
            !datum = ddatum
            !weekdag = strWeekDag
            !aangemaakt = Date
            .Update
        End With
    Next
    rst.Close
    dbs.Close

End Function

Deze werkt. Bedankt. Ga hem eens goed bekijken en zien waar ik de mist in gegaan ben.
option explicit was aanwezig
 
Ik snap het aanzetje van je "functie" (die eigenlijk een procedure is) niet.
Volgens Google Translate (en nog een paar woordenboeken) is de vertaling van “function” echt wel “functie”, en niet procedure. Het Engels voor ‘procedure’ is daarentegen… ‘procedure’. Verwarrend? Niet echt :).
 
Als je een functie gebruikt zoals functies bedoeld zijn, retourneert een (ingebouwde of zelfgemaakte) functie één waarde, die je dan bijvoorbeeld aan een variabele toekent.
Een procedure (in VBA een Sub) voert een aantal handelingen uit. Bijvoorbeeld het aanmaken van een aantal records.

Valt me tegen dat iemand die normaalgesproken zo strikt in de leer is deze nuances niet aanvoelt.
 
Deze werkt. Bedankt. Ga hem eens goed bekijken en zien waar ik de mist in gegaan ben.

Het probleem zat hem in de dlookup:
DLookup("aantal", "Tweekdag", "weekdag =" & Format(ddatum, "dddd"))
Aangezien het resultaat van de format functie een string is moet deze tussen aanhalingstekens staan
In VBA kan je één aanhalingsteken typen door "", maar heel het criterium moet ook tussen zijn eigen aanhalingstekens staan, vandaar
"Weekdag =""" & strWeekDag & """"
De vetjes gedrukte aanhalingstekens zijn degenen die voor VBA aanduiden dat wat ertussen staat een string is, de andere zijn de dubbele quotes die in het resultaat als één getypte quote vertaald worden, het resultaat:

Weekdag = "zaterdag"
 
Valt me tegen dat iemand die normaalgesproken zo strikt in de leer is deze nuances niet aanvoelt.
Valt mij dan weer tegen dat je gevoel voor humor ergens op zolder is blijven liggen….
 
Omdat je er 100% zeker van kan zijn dat er geen enkele quoots in de naam van de dag zitten, kan het ook simpeler:
Code:
[COLOR=#333333] aantal = DLookup("aantal", "Tweekdag", "weekdag =‘" & strWeekDag & "’")
(De verkeerde quootjes komen door de iPad :))[/COLOR]
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan