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.
Mocht de database nodig zijn, dan hoor ik het graag.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
de uitkomst van de format functie is een string, niet een datum.
SQL DBA
(just like a normal person - only way cooler)
Hoi,
En hem in de functie dis ook als string definiëren.
Bedankt
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 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 aangepast door xps351 : 31 januari 2023 om 17:08
Groeten,
Peter
Check of bovenaan je module het volgende staat:
Anders kan je dat toevoegen, dan kan je geen fouten maken door variabelen te gebruiken die niet gedeclareerd zijnCode:Option explicit
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
SQL DBA
(just like a normal person - only way cooler)
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
Gebruik de QUOTE knop alleen als je iets wit citeren.
Op deze pagina kun je zien hoe je met TAGS werkt.
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.
Groeten,
Peter
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"
SQL DBA
(just like a normal person - only way cooler)
Gebruik de QUOTE knop alleen als je iets wit citeren.
Op deze pagina kun je zien hoe je met TAGS werkt.
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:aantal = DLookup("aantal", "Tweekdag", "weekdag =‘" & strWeekDag & "’")
(De verkeerde quootjes komen door de iPad)
Gebruik de QUOTE knop alleen als je iets wit citeren.
Op deze pagina kun je zien hoe je met TAGS werkt.