Hej! Det här är en variant jag brukar använda. Skit snygg, intelligent lösning.Känner igen den men kom inte på hur det var. Missade ni Henriks lösning, eller var det att ni inte fattade den? <b>Missade ni Henriks lösning, eller var det att ni inte fattade den? </b> <b>och som dessutom ger fel värde i vissa fall.</b> SvenPon skrev: Phuuuuuuuuuuuuuuuuuuuuuu..................................... <b>Ok besserwisser då ser jag/vi fram emot ett exempel där Jannes algoritm går fel !!! ???</b> > Ok besserwisser då ser jag/vi fram emot ett exempel där Jannes algoritm går fel !!! ??? Oki på det,det observerade jag inte.Då blir det en lite osnyggare lösning. Fortfarande problem med en hel del datumformat... Såhär kanske kan fungera bättre, men ändå är Henriks lösning kortare, mer lättförstålig och "snyggare". SOm info så har jag valt Henriks lösning och den fungerade precis som jag ville. Oki på det,får väl ge mig för en gångs skull ;-) Ifall ni vill ha en omständig lösning så kan ni väl göra den utan att blanda datatyper vilt, och utan att använda Variant.Få ut sista datumeti aktuell månad
Finns det något sätt att få jag kan få ut sista datumet i aktuell månad
/TyronneSv: Få ut sista datumeti aktuell månad
Dim varDate As Variant
varDate = CDate(Format(Now + 27, "YYYY-MM-") & "01") - 1
MsgBox varDate
Mvh, Janne
Sv:Få ut sista datumeti aktuell månad
GULD åker i godislådan direkt.
Jag tackar även för Tyronne för han verkar inte ha vet att ge någon form av FeedBack
<code>
Option Explicit
'Last Day of Month
'Med tack till Janne Hentschel PelleSoft
Private Sub Command1_Click()
Dim varDate As Variant
varDate = CDate(Format$(Date + 27, "YYYY-MM-") & "01") - 1
MsgBox "Månadens sista dag är " & Right$(CStr(varDate), 2)
End Sub
</code>Sv: Få ut sista datumeti aktuell månad
Henriks lösning är snygg och intelligent, till skilland från Jannes lösning (ja, usäkta mig, men) som är en onödigt omständig soppa av olika datatyper, och som dessutom ger fel värde i vissa fall.Sv:Få ut sista datumeti aktuell månad
Nej Vi/Jag missade inte denna lösning som han bokstav för bokstav stulit från VbAccelerator.
Det intelligenta med Jannes lösning är att den funkar när jag klistar in den.Den är Optimal !Sv: Få ut sista datumeti aktuell månad
Ok besserwisser då ser jag/vi fram emot ett exempel där Jannes algoritm går fel !!! ???
Henriks stöldgods är bara djä..." bullshit" som inte impar.
Tycker att Henrik förolämpar oss . Vi kan också läsa innatill på de olika VB siterna !
Kom igen Sv:Få ut sista datumeti aktuell månad
<b>Henriks stöldgods är bara djä..." bullshit" som inte impar.
Tycker att Henrik förolämpar oss . Vi kan också läsa innatill på de olika VB siterna !</b>
Va? Vad är detta för trakasserier? Det handlar väl inte om att försöka överglänsa varandra här? Det handlar väl om att hjälpa? Dessutom ser jag ingen anledning att uppfinna hjulet på nytt när det redan finns en bra och fungerande lösning som man kan vidarebefordra...
Nä SvenPon, slipa lite på din attityd och dessutom så har du en rejäl bit kvar innan du kan impa om det nu är det som är ditt personliga mål i livet.
// JohanSv: Få ut sista datumeti aktuell månad
Ständigt dessa vesslor !!!Sv:Få ut sista datumeti aktuell månad
Om aktuell dag är t.ex. första mars får jag svaret att måndens sista dag är 28. Mig veterligen har mars 31 dagar...Dim MittDate As Date
MittDate = #3/1/2005#
Dim varDate As Variant
varDate = CDate(Format$(MittDate + 27, "YYYY-MM-") & "01") - 1
MsgBox "Månadens sista dag är " & Right$(CStr(varDate), 2)
Kör jag med t.ex. danska som datumformat får jag alltid årtalet, 05 i detta fall (enkelt att åtgärda, men det fungerar inte som det ser ut nu).
Att använda en funktion som bara klarar vissa datumformat måste ses som ren idioti när man känner till andra sätt utan den bristen. Att den dessutom ger fel svar vissa dagar gör ju inte saken bättre. Hantera aldrig datum som strängar, då kan man få denna typ av problem. Henriks lösning hanterar datum som just datum, därför får man inte denna typ av problem.
/Johan
Sv:Få ut sista datumeti aktuell månad
För alla datum där det finns 27 dagar eller mer kvar i månaden så kommer uttrycket Date + 27 att ge ett datum i samma månad istället för nästa månad. Därmed kommer uttrycket att ge sista dagen i förra månaden istället för sista dagen i denna månad.
Exempel:
#2005-03-04# + 27 = #2005-03-31#
Format$(#2005-03-31#, "YYYY-MM-") = "2005-03-"
CDate("2005-03-" & "01") = #2005-03-01#
#2005-03-01# - 1 = #2005-02-28#
CStr(#2005-02-28#) = "2005-02-28" (i gynnsamma fall)
Right("2005-02-28", 2) = "28"
Alltså ger formeln resultatet att mars har 28 dagar.
Kanske Henrik inte har skrivit koden själv, men det har han väl heller aldrig påstått. Janne däremot kanske har skrivit sin kod själv, men det är ju ingen större tröst när den inte fungerar...Sv: Få ut sista datumeti aktuell månad
<code>
Option Explicit
'Last Day of Month
'Med tack till Janne Hentschel PelleSoft
Private Sub Command1_Click()
Dim varDate As Variant
If Right$(Date, 2) > 4 Then
varDate = CDate(Format$(Date + 27, "YYYY-MM-") & "01") - 1
Else
varDate = CDate(Format$(Date + 31, "YYYY-MM-") & "01") - 1
End If
MsgBox "Månadens sista dag är " & Right$(CStr(varDate), 2)
End Sub
</code>Sv:Få ut sista datumeti aktuell månad
Option Explicit
'Last Day of Month
'Med tack till Janne Hentschel PelleSoft
Private Sub Command1_Click() ...
Private Sub Command1_Click()
Dim varDate As Variant
If Right$(Date, 2) > 4 Then
varDate = CDate(Format$(Date + 27, "YYYY-MM-") & "01") - 1
Else
varDate = CDate(Format$(Date + 31, "YYYY-MM-") & "01") - 1
End If
MsgBox "Månadens sista dag är " & Format$(varDate, "DD")
End Sub
/Johan
Sv: Få ut sista datumeti aktuell månad
Tack Henrik!
/TyronneSv:Få ut sista datumeti aktuell månad
Fö hatar jag det djä... DateSerial
Tycker fortfarande att Janne:s lösning är intelligent och äkta tankearbete !Sv: Få ut sista datumeti aktuell månad
Lägg datumet i en variabel istället för att hämta det ifrån Date gång på gång, annars kommer den ju att ge fel ifall koden körs exakt vid midnatt. Visserligen är det ju inte så stor risk, men det är ju alltid bättre att skriva kod som fungerar alla gånger istället för kod som fungerar nästan alla gånger.
För att den ska fungera med olika datumformat så kan man ju inte använda Right$(Date,2) för att kolla dagen i månaden.Dim datToday as Date
Dim datLast As Date
datToday = Date()
If Day(datToday) > 4 Then
datLast = DateAdd("d", -1, CDate(Format$(DateAdd("d", 27, datToday), "YYYY-MM-") & "01"))
Else
datLast = DateAdd("d", -1, CDate(Format$(DateAdd("d", 31, datToday, "YYYY-MM-") & "01"))
End If
MsgBox "Månadens sista dag är " & Format$(datLast, "DD")