01. oktober 2018 - 13:45Der er
10 kommentarer og 1 løsning
Omregn dato til forrige tirsdag (VBA)
Hej
I databasens formular har jeg brug for hjælp til kode, for at få dato fra et felt omregnet til forrige tirsdag i et andet felt. Det skal kunne indsættes i et felts efteropdatering.
Der er 2 regler: 1) Hvis feltet me.jubilæumsdato er udfyldt med en dato lig med ugedag tirsdag, skal der i feltet me.[Hvidovre avis] skrives dato for forrige tirsdag 2) Hvis feltet me.jubilæumsdato er udfyldt med en dato ulig med ugedag tirsdag, skal der i feltet me.[Hvidovre avis] skrives dato for sidste tirsdag
du skal se på weekday() https://www.excelfunctions.net/vba-weekday-function.html hvis du bruger dagsdag = Weekday( Datoen, vbTuesday ) så vil den være 1 på tirsdage, og du skal 7 dage tilbage - ellers en uge længere tilbage Tirsdag = dateadd( datoen, 1-(7+dagsdag))
Public Function GetTuesday(InputDate As Variant) As Date If Weekday(InputDate, vbSunday) = vbTuesday Then GetTuesday = DateAdd("ww", -2, CDate(InputDate)) Else GetTuesday = InputDate - Weekday(InputDate, vbTuesday) + 1 End If End Function
Det kan muligvis gøres elegantere. Men min minitest ser OK ud:
Nu er det noget tid siden, at jeg rodede med vba i databaser. Jeg kan vel ikke få en function ind i efteropdatering, så den skal vel i stedet kaldes? Derudover, hvordan vil skulle sættes op til feltet me.jubilæumsdato?
Falster: Når jeg bruger din function, får jeg kun resultat 00:00:00 ud af det. Jeg tænker det er fordi jubilæumsdatofeltet ikke kommer ind som Inputdate.
Claes: Bruger jeg din kode, får jeg fejl "Argument not optional". Jeg har ikke hjerne til at gennemskue hvor det går galt
Som nævnt har jeg aldrig "gidet"/haft brug for at indsamle og bearbejde data via formularer.
Tabeller med efterfølgende forespørgsler med indbyggede og egne funktioner (og evt. opdateringsforespørgsler samt enkelte rapporter) har været tilstrækkeligt for mig.
Håber andre med mere forstand på anvendelse af formularer kigger med :-)
microsoft har 2 (TO) versioner af weekday() en til makro, og en til excel osv - jeg havde brugt argument til makro, og så er der forkert rækkefølge i DateAdd ( interval, number, date ) (jeg bør slå efter, istedet for at prøve at huske...)
Sub Test_Find_Tirsdag() Dim i As Integer For i = 1 To 14 Debug.Print Date + -10 + i; " -> "; Find_Tirsdag(Date - 10 + i) Next i End Sub
Function Find_Tirsdag(Dato As Date) As Date Dim w As Integer
w = Weekday(Dato, vbMonday) If w < 3 Then 'Ma..Ti Find_Tirsdag = DateAdd("d", -w - 5, Dato) Else 'On..Sø Find_Tirsdag = DateAdd("d", -w + 2, Dato) End If End Function
I din form: Me.[Hvidovre avis] = Find_Tirsdag(Me.Jubilæumsdato)
(I øvrigt: Undgå mellemrum i feltnavne. Det kan give problemer)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.