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