Avatar billede ups34 Nybegynder
20. juni 2011 - 14:54 Der er 13 kommentarer og
1 løsning

Dato formatering i VBA

Hej alle

Jeg har en userform der åbner med:

Dato.Text = Format(Now, "dd-mm-yy")

Det fungere fint og DD står fint ;-)

Senere i samme userform:

If Dato.Value > Worksheets("Uge seddel").Range("A18") Then
usfopdater.Show

Nu kommer mit problem; den læser kun dagen og ikke datoen som helhed. DD er 20/06/11 og datoen i "A18" er 03/07/11, aligevel åbner userformen????

Jeg har via forsøg fundet ud af at så længe dagen (fx d. 28)er højere end dagen i DD er der ingen problemer

Er der nogen der har et bud på denne

PFT

MVH
Ups
Avatar billede majbom Novice
20. juni 2011 - 15:17 #1
prøv at smid feltet fra excel igennem format også...
Avatar billede ups34 Nybegynder
20. juni 2011 - 15:54 #2
Hej splazz

Nu spørger jeg nok dumt, men hvordan? Cellens dato værdi er bestemt af en begyndelses dato som 1. dato for en løn periode. DD finder så den række hvor DD er repræsenteret og aflevere data i forskellige kolonner. Den opdatering der skal ske finder sted i "A5" som har en kæde til et opdateringsark, resten af cellerne er blot +1 ("A5"+1) osv
Opdateingen skal altså kun finde sted når en ny løn periode er begyndt

MVh
Ups
Avatar billede majbom Novice
20. juni 2011 - 18:58 #3
Format(Worksheets("Uge seddel").Range("A18"), "dd-mm-yy") ?
Avatar billede ups34 Nybegynder
21. juni 2011 - 07:36 #4
Hej

Jeg har lagt denne formatering ind:

Worksheets("Uge seddel").Range("A18").Select
With ActiveCell
Format (dd - mm - yy)
End With

Desværre hjælper det ikke, den læser stadig ikke hele datoen
Avatar billede majbom Novice
21. juni 2011 - 08:41 #5
jeg er desværre ikke så meget inde i VBA, jeg har ikke flere forslag...
Avatar billede Tryphon Nybegynder
21. juni 2011 - 11:46 #6
Umiddelbart tror jeg, at problemet er, at Dato.Value er en tekst og værdien i Excel arket er et dato-serienummer.

Prøv at bruge DateSerial(År, Måned, Dag) i VBA.

F.eks.
DateSerial(Right(Dato.Value,4), mid(Dato.Value,4,2), Left(Dato.Value,2)) > Worksheets("Uge seddel").Range("A18") Then
usfopdater.Show

Det er skrevet lidt i frihånd, så det kan være, at du skal prøve dig lidt frem for at få de rigtige år, måned, dag værdier frem.
Avatar billede ups34 Nybegynder
21. juni 2011 - 12:32 #7
hej tryphon

Jeg har rettet det til:

If DateSerial(Right(Dato.Value,4), mid(Dato.Value,4,2), Left(Dato.Value,2)) > Worksheets("Uge seddel").Range("A18") Then
usfopdater.Show

Og det virker ikke.
Den acceptere ikke formlen i sin helhed
Er den sat forkert op med If?

MVh
ups
Avatar billede Tryphon Nybegynder
21. juni 2011 - 12:45 #8
Ikke umiddelbart. Det kan have noget med datatyper at gøre. Prøv at konvertere til integer (Cint)

If DateSerial(CInt(Right(Dato.Value, 4)), CInt(Mid(Dato.Value, 4, 2)), CInt(Left(Dato.Value, 2))) > Worksheets("Uge seddel").Range("A18") Then
    usfopdater.Show
End If

Hvis det stadig ikke virker, så prøv at køre koden igennem med F8 (step by step) og når du kommer til ovennævnte "if", så før musen over "left(dato.value,2) og se, om der står 2011. Gør det samme med måned og dag og kontroller om der står noget meningsfyldt.

Kontroller at din datoværdi i celle A18 er en reel datoværdi. Formater cellen midlertidigt til standard og kontroller, at der står 40727 for datoen 2.7.11.

Jeg lukker ned om et par timer og er først tilbage torsdag, så hvis du ikke får svar, er det derfor. :-)
Avatar billede ups34 Nybegynder
21. juni 2011 - 13:01 #9
Hej

Når jeg kører musen hen over for jeg hele værdien altså 20 - 06 - 11. Det er ikke delt op på år måned og dag. (Der står det samme ved alle)
Jeg bruger 1904 datosystem da jeg skal kunne registrere negativtid. Værdien i A18 er 39265
MVh
Ups
Avatar billede Tryphon Nybegynder
21. juni 2011 - 13:48 #10
39265 er OK i 1904 datosystemet

Har du sat musen over ordet right eller over dato.value? Giver forskelligt resultat.

Hvis dit Dato object er formatteret rigtigt til datoformat, kan det være, du skal bruge nedenstående istedet.


If DateSerial(year(Dato.Value), month(Dato.Value), day(dato.Value) > Worksheets("Uge seddel").Range("A18") Then
    usfopdater.Show
End If

Du kan evt. krydre den med følgende

dim y as integer
dim m as integer
dim d as integer

y=right(dato.value,4)
m=mid(dato.value,4,2)
d=left(dato.value,2)

msgbox y & vbcrlf & m & vbcrlf & d

Så kommer værdierne for år, måned og dag frem i en messagebox, og det kan måske hjælpe dig med at debugge.
Avatar billede ups34 Nybegynder
22. juni 2011 - 11:39 #11
Hej Tryphon

Jeg kan altså ikke få det at fungere.

Selve koden du anbefaler, får en fejlmelding
Avatar billede Tryphon Nybegynder
23. juni 2011 - 08:29 #12
Kan du evt. komme lidt nærmere ind på, hvad denne fejlmelding siger? Og i hvilken linje den opstår?
Avatar billede ups34 Nybegynder
24. juni 2011 - 09:50 #13
Hej Tryphon

Så virker det ;-)
Det var bare at der manglede en parentes efter day(dato.Value))
Lidt pinligt jeg ikke så det med det samme sry

Mange tak for hjælpen, smid et svar

MVh
Ups
Avatar billede Tryphon Nybegynder
24. juni 2011 - 11:06 #14
Ja, man skal passe på med paranteserne. Det skal jo gå op i sidste ende :-)
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
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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