Jag håller på med ett program som man ska köra på en toutchskärm, alltså ska man trycka på knappar på skärmen med ett finger. I programmet har jag en almenacka, en MounthView. När man byter datum på den klickar man på ett datum. Jag har bytt teckensnitt till ett större så där är det inga problem. Men däremot när jag vill byta månad så ändras inte storleken på dom små pilarna för att byta månad. Det är nästan omöjligt att byta månad med fingrarna. Jag skulle vilja lägga en stor knapp ovanpå respektive pil så att man lättare kna trycka på den. Vet någon koden som gör att MonthView:en byter månad precis som dom ordinarie pilarna. "en almenacka" Almanacka ;-) Tack jag hade nästan gett upp hoppet om ett svar. Dock blir dock ett problem. Programmet kraschar om man står på t.ex 31 januari och trycker på knappen för nästa månad. Krashen beror på att nästa månad som är februari inte har dag 31. Som vanlig. Är det acceptabelt att den går till 28:e i nästa månad om från datum > 28. Duger denna modifiering ? Konstig sak händer. Allt fungerar i 2008. Är man dock i ett annat år byter den månad rätt men året blir alltid 2009. Det spelar ingen roll vilket år man åker i alla fall tillbaka till 2009. Konstigt. Testade min kod. Den börjar januari 2009. jag stegar med Plusknappen och den Det är riktigt att den skiftar till januari 2010 efter december 2009. Men det konstiga är att efter januari 2010 blir det februari 2009. Det är pga att "Date" används i formeln. Jaaaaaaaaa det var ju tokigt med Date.Får Vi sätta på tänkarmössan. OK nu får du bli testförare. Tack nu funkar allt som det ska. Minusknappen var enkel. Bara att göra några mindre justeringar. BraaaaaaaaaaaaaaaaaaaMounthView
Sv: MounthView
Något i den här stilen kanske.
Har döpt MonthView1 till MView CommandButton till cmdPlus
<code>
Option Explicit
Private Sub Form_Load()
cmdPlus.Caption = ">" 'Plus
End Sub
Private Sub cmdPlus_Click() 'Öka en månad
'Förmodligen får du trycka 2 ggr på knappen 1 SetFocus 2 verkställ
Dim mthNum As Long 'månadens nummer
mthNum = MView.Month
If mthNum = 12 Then
MView.Year = MView.Year + 1
MView.Month = 1
Else
MView.Month = mthNum + 1
End If
End Sub
</code>
"Vooofoor blir det på detta viset ?" DVS att klick inte kör hela koden.
Jag måste trycka 2 ggr 1 Focus och sedan verkställ ???
Edit: Fae... tänkte på testa samma kod i cmdPlus.GotFocusSv: MounthView
Sv:MounthView
<b>"Ju mer man rotar i en skit , ju mer luktar det."</b>
Då får Vi lägga in några villkor.
Då blir det väl samma om du står på 31:e och nästa månad har 30 dagar.
Jag lägger ut ett förslag till lösning inom kort.Sv: MounthView
Enklaste lösningen.Sv: MounthView
<code>
Private Sub cmdPlus_Click() 'Öka en månad
'Förmodligen får du trycka 2 ggr på knappen 1 SetFocus 2 verkställ
Dim mthNum As Long 'månadens nummer
mthNum = MView.Month
'Denna rad gör att den alltid ställer sig på den 1:a i alla månader
MView.Value = Format$(Date, "yyyy-mm" & "-01")
If mthNum = 12 Then
MView.Year = MView.Year + 1
MView.Month = 1
Else
MView.Month = mthNum + 1
End If
End Sub
</code>Sv:MounthView
Sv: MounthView
skiftar till 2010 efter december.
Är det Minusknappen du referera till ? Där blir ju självklart koden lite annan.
Visa din kod som inte funkar.
Edit: Den börjar klart alltid i 2009 när programmet startar första gången.
Vill du ha det annorlunda får du lagra senaste år datum när programmet avslutar.Sv:MounthView
Sv: MounthView
Det korrekta är då antingen att ta MView.Value = DateAdd(MView.Value, "m", 1), vilket ger VBs inbyggda ökning (förmodligen ger då 31:e januari + 1 månad något i stil med 3:e februari.
En variant som man då kan använda är något i stil med:
PrevDate = mview.value
NextDate = dateadd(prevdate, "m", 1)
If Day(NextDate) <> day(PrevDate) then
nextdate = dateadd(dateserial(year(nextdate), month(nextdate), 1), "d", -1)
end if
mview.value = nextdateSv:MounthView
Niklas lösning är helt Ok men skall försöka översmarta den. ;-)Sv: MounthView
Har byt ut Date mot MView.Value
Kolla klockan mellan dessa två inlägg. Det tog 8 min
<code>
Private Sub cmdPlus_Click() 'Öka en månad
'Förmodligen får du trycka 2 ggr på knappen 1 SetFocus 2 verkställ
Dim mthNum As Long 'månadens nummer
mthNum = MView.Month
'Denna rad gör att den alltid ställer sig på den 1:a i alla månader
MView.Value = Format$(MView.Value, "yyyy-mm" & "-01")
If mthNum = 12 Then
MView.Year = MView.Year + 1
MView.Month = 1
Else
MView.Month = mthNum + 1
End If
End Sub
</code>
Visa gärna hur du snickrar till Minusknappen
DSSv:MounthView
Dim mthNum As Long 'månadens nummer
mthNum = MView.Month
'Denna rad gör att den alltid ställer sig på den 1:a i alla månader
MView.Value = Format$(MView.Value, "yyyy-mm" & "-01")
If mthNum = 1 Then
MView.Year = MView.Year - 1
MView.Month = 12
Else
MView.Month = mthNum - 1
End IfSv: MounthView
Ett ord på vägen när det gäller Datum.
Betrakta varje datum som ett långt heltal.
Idag 2009-01-18 är det 39831
<code>
Dim dNow As Long
dNow = CDate(Now)
MsgBox dNow
</code>
Elegant när man skall addera eller subtrahera
<code>
MsgBox Format$(39831, "yyyy - mm - dd")
</code>
Hur många dagar ?
<code>
Dim dNow As Long, dBorn As Long
dBorn = CDate("1939-06-02")
dNow = CDate(Now)
MsgBox "Sven har levat " & dNow - dBorn & " dagar"
</code>
Ni kan ta Era "DateDiff" "DateAdd" "DateSerial" och allt vad det heter och stoppa upp i röven.
Vad gäller Tid sekunder mm så är det exakt samma teknik.
Man deklarerar tNow som Double