Avatar billede Slettet bruger
07. september 2011 - 18:21 Der er 15 kommentarer og
1 løsning

DatoForskel ???

Hej igen

Hvad skal jeg skrive vis jeg også vil ha at antal dage også kommer med i denne kode

Function DatoForskel(D1 As Date, D2 As Date) As String
  Dim MånederIalt As Long
  Dim AntalMåneder As Long
  Dim AntalÅr As Long
 
  MånederIalt = DateDiff("m", D1, D2)
  AntalÅr = Int(MånederIalt / 12)
  AntalMåneder = MånederIalt - (AntalÅr * 12)
  DatoForskel = AntalÅr & " år og " & AntalMåneder & " måneder"
End Function

Dit udtryk bliver så meget enklere:

If Not Me.NewRecord Then
  Iif IsNull(Me.udmeldelsesdato) Then
    Me.Feltnavn=DatoForskel(Me.Indmeldt,Date)
  Else
    Me.Feltnavn=DatoForskel(Me.Indmeldt,Me.Udmeldelsesdato)
  End If
EndIf

MVH CB
Avatar billede claes57 Ekspert
07. september 2011 - 20:15 #1
dette burde kunne gøre det - og den skriver ikke år hvis det er 0

Function DatoForskel(D1 As Date, D2 As Date) As String
  Dim MånederIalt As Long
  Dim AntalMåneder As Long
  Dim AntalÅr As Long
  Dim AntalDage As Long
  Dim Res As String

  MånederIalt = DateDiff("m", D1, D2)
  AntalÅr = Int(MånederIalt / 12)
  AntalMåneder = MånederIalt - (AntalÅr * 12)
  D2 = DateAdd("d", 0-MånederIalt, D2)
  AntalDage = DateDiff("d", D1, D2)

  if AntalÅr>0 then
    Res = AntalÅr & " år"
  end if

  if AntalMåneder>0 then
    if AntalÅr>0 then Res = Res & " og "
    Res = AntalMåneder & " måneder"
  end if

  if AntalDage >0 then
    if AntalÅr>0 or AntalMåneder>0 then Res = Res & " og "
    Res = AntalDage & " dage"
  end if

  DatoForskel = Res & "."
End Function

If Not Me.NewRecord Then
  Iif IsNull(Me.udmeldelsesdato) Then
    Me.Feltnavn=DatoForskel(Me.Indmeldt,Date)
  Else
    Me.Feltnavn=DatoForskel(Me.Indmeldt,Me.Udmeldelsesdato)
  End If
End If
Avatar billede Slettet bruger
07. september 2011 - 20:44 #2
den skal skriv det som denne linie 12 år 2 månder 215 dage
Avatar billede claes57 Ekspert
08. september 2011 - 10:25 #3
hvordan 215 dage? det kan da maks være det antal dage, der er tilbage når år og måneder er fratrukket (dvs maks 30 på måneder med 31 dage).
alternativt, så kan du få det samlede antal dage (altså inkl de 12 år og 2 mdr) hvilket så ville være over 4440 dage.
Avatar billede Slettet bruger
08. september 2011 - 13:38 #4
det er også det jeg gerne ville ha at den viste min i mit felt
Avatar billede Slettet bruger
08. september 2011 - 13:39 #5
det med maks 30 dage på en månede med 31 dage
Avatar billede claes57 Ekspert
11. september 2011 - 09:42 #6
det skulle min kode da også gøre - men hvis en bruger nu kun er med kort tid, så springer den '0 år' over, og skriver kun fx '1 måned og 5 dage' - hvis det er over 1 år, så kommer året med.
Avatar billede Slettet bruger
12. september 2011 - 17:43 #7
Den kode skriver kun dage i mit felt
Avatar billede claes57 Ekspert
12. september 2011 - 17:50 #8
der mangler en "res &" i linjen
    Res = AntalDage & " dage"
der skulle stå
    Res = Res & AntalDage & " dage"
Avatar billede Slettet bruger
12. september 2011 - 17:59 #9
den viser nu hvis datoen for indmelte er 19/9-1981 så skriver den 30 år og 12590 dage det er da forkert
Avatar billede Slettet bruger
12. september 2011 - 18:01 #10
den skal da skrive 29 år 8 månder og 7 dage
Avatar billede claes57 Ekspert
12. september 2011 - 18:18 #11
der er to fejl mere (mindst)
    Res = AntalMåneder & " måneder"
skal også være
    Res = Res & AntalMåneder & " måneder"
og så skal der rettes i
  D2 = DateAdd("d", 0-MånederIalt, D2)
det er ikke dage, der skal tælles ned, men antal måneder
  D2 = DateAdd("m", 0-MånederIalt, D2)
Avatar billede Slettet bruger
12. september 2011 - 22:09 #12
jeg har en der er indmeldt d. 19/9-81 men den skriver at han har været med i 30 år i dag og det er ikke rigtigt da det ikke er den 19/9-11 i nu.
Avatar billede claes57 Ekspert
13. september 2011 - 08:03 #13
den fejl har altid været der - men vi kan da godt rette den.
lige efter linjen:
AntalÅr = Int(MånederIalt / 12)

tilføjer du disse 3 linjer
If Datepart("m",D2)=Datepart("m",D1) and Datepart("d",D2)<Datepart("d",D1) then
AntalÅr =AntalÅr -1
End If

dvs hvis vi lige rammer samme måned og vi ikke har nået datoen endnu, så fratræk 1 i år
Avatar billede Slettet bruger
13. september 2011 - 15:17 #14
Tak for hjælpen det er som det skal værer nu
Avatar billede claes57 Ekspert
13. september 2011 - 17:30 #15
så er her et svar, så du kan lukke spg....
Avatar billede Slettet bruger
26. september 2011 - 21:16 #16
Hej igen

kan men sætte en kode ind i denne så man kan få den til at skifte farve i tekst feltet vis der er gået mere ind 3 år

If Not Me.NewRecord Then
  Iif IsNull(Me.udmeldelsesdato) Then
    Me.Feltnavn=DatoForskel(Me.Indmeldt,Date)
  Else
    Me.Feltnavn=DatoForskel(Me.Indmeldt,Me.Udmeldelsesdato)
  End If
EndIf
hilsen CB
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester